Lors de la lecture du flux de fichiers, il est souvent rencontré par la cause de la cause du code brouillé. Premièrement, clairement, les concepts et les différences entre les fichiers texte et les fichiers binaires.
Les fichiers texte sont des fichiers basés sur les caractères. Les fichiers binaires sont basés sur des fichiers d'encodage basés sur la valeur.
Par conséquent, on peut voir que le fichier texte est essentiellement codé (il existe également des codes non fixés tels que UTF-8). Et les fichiers binaires peuvent être considérés comme un codé long, car il s'agit d'un codage de valeur, combien de bites représentent une valeur, qui est déterminée par vous.
Pour les fichiers binaires, vous ne devez pas utiliser de chaîne, car la chaîne utilisera le codage par défaut du système lorsque la chaîne par défaut est à l'initialisation.
Pour les fichiers texte, parce que le codage est corrigé, tant que vous lisez le fichier, utilisez le fichier lui-même pour analyser le fichier, puis obtenez l'octet. . Bien que les fichiers binaires puissent également obtenir son format de codage de texte, il est inexact, il ne peut donc pas être dit en même temps.
L'opération spécifique est la suivante:
1) Obtenez le format du fichier texte
String statique public getFileEncode (String Path) {String charSet = "ASCI"; )); ] == (byte) 0xfe) {charSet = "Unicode"; {{CharSet = "Unicode";; (octet) 0xbf) {charse = "utf8"; ! <= 0xdf <= 0xdf <= 0xdf <= 0xdf <= 0xdf <= 0xdf) {read = bis.read (); 0x80-0xbf), ou peut être continué; else casser;} else if (0xe0 <= read && read <= 0xef) {// il peut également faire une erreur, mais la probabilité est moindre. = Read && read <= 0xbf) {charset = "utf-8"; + Integer.tohexString (read);}} catch (exception e) {e.printStackTrace ();} enfin {if (bis! = Null) {try {bis.close ();} catch ption ex) {}}} Return charSet;} String statique privé getEncode (int flag1, int flag2, int flag3) {chaîne encode = "" ""; -8) if (Flag1 == 255 && Flag2 == 254) {Encode = "Unicode"; == 191) {encode = "utf8";} else {Encode = "ASCI";2) Lisez le flux de fichiers via le format d'encodage du fichier
/ *** Obtenez le contenu du fichier via le chemin. ! * / public static static readFile (String Path) {String data = null; Format String Code = Fileencode.getFileEncode (Path); InputStreamReader ISR = NULL; L'environnement ne signifie pas le codage du système d'exploitation // code = System.getProperty ("file.encoding"); 1; CHAR [] Buffer = NOUVEAU CHAR [1024]; StringBuffer SB = new StringBuffer (); , longueur);} data = new String (sb);} catch (exception e) {e.printStackTrace (); (isr! = null) {Isr.close ();}} catch (ioException e) {e.printStackTrace (); }3) Écrivez le fichier via le format spécifié par le fichier
/ ** * Enregistrez le contenu du fichier en fonction du chemin d'accès et du format de codage spécifié. Au contenu du texte, méthode de sécurité * * @param data * Les données d'octets qui seront écrites dans le fichier * @param path * Fichier Path, contient le nom du fichier * @return boolean * Lorsque l'écriture est terminée, retournez à True; / Public static boolean writeFile (data byte [], trajet de chaîne, code de chaîne) {booléen Flag = true; = new File (file.get parent ()); i f (! file .exists ()) {file.mkDirs ();}}} if ("asci" .equals (code)) {code = "gbk"; } OSW = new outputtreamwriter (new FileOutputStream (Path), Code); info ("Tofile io exception:" + e.getMessage ()); ();4) Pour les fichiers binaires et il y a très peu de contenu, tels que la documentation Word, etc., vous pouvez lire et écrire des fichiers de la manière suivante
/** * Read files from the specified path to the byte array, you can choose this method for some non -text format content * 457364578634785634534 * @Param Path * file path, including file name * @Return byte [] * file byte byte octet octet octet byte par octet par octet par octet par octet par octet par octet par octet octet byte par octet octet par octet par octet par byte par byte. FileInputStream Stream = new FileInputStream (Path); Le contenu d'octets dans le fichier correspondant. Cette méthode peut être utilisée pour certains fichiers non texte. * @param data * 将要写入到文件中的字节数据 * @param chemin * 文件路径, 包含文件名 * @return boolean isok 当写入完毕时返回 true; * @throws exception * / public static booléen tofile ( Données d'octupital [], chemin de la chaîne) exceptionnelle {FileOutputStream Out = new FileOutStStream (Path);Ce qui précède est tout le contenu de cet article.