파일 스트림을 읽을 때, 그것은 종종 breadbled 코드의 원인이 파일 인코딩 형식으로 인한 주요 문제입니다. 먼저, 텍스트 파일과 이진 파일의 개념과 차이점.
텍스트 파일은 문자 기반 파일입니다. 이진 파일은 값 기반 인코딩 파일을 기반으로합니다. 특정 응용 프로그램에 따라 특정 값을 지정할 수 있습니다 (이 프로세스는 사용자 정의 인코딩으로 간주 될 수 있습니다.)
따라서 텍스트 파일이 기본적으로 코딩되어 있음을 알 수 있습니다 (UTF-8과 같은 고정되지 않은 코드도 있습니다). 이진 파일은 값 인코딩이기 때문에 긴 코드로 볼 수 있습니다.
바이너리 파일의 경우 문자열이 초기화에 기본값을 읽고, 조작하고, 바이트 흐름을 작성할 수 있으므로 문자열이 시스템 기본 코딩을 사용하기 때문에 문자열을 사용해서는 안됩니다.
텍스트 파일의 경우 인코딩이 고정되어 파일 자체를 사용하여 파일을 분석 한 다음 지정된 형식의 문자열을 초기화하여 텍스트를 얻지 못합니다. . 이진 파일은 텍스트 인코딩 형식을 얻을 수 있지만 부정확하므로 동시에 말할 수는 없습니다.
특정 작업은 다음과 같습니다.
1) 텍스트 파일의 형식을 가져옵니다
public string getfileencode (String path) {asci "는 byte = new Byte [3]; bis.mark (0); ] == (byte) 0xfe) {charset = "unicode"; // utf-16le checked = true;} else if (first3bytes [0] == (byte) 0xfe && first3bytes [1] == (byte) 0xfff. {{charset = "unicode"; // utf-16be check = true;} else if (first3bytes [0] == (byte) 0xef && first3bytes [1] == (byte) 0xbb && first3bytes [2 2] == (BYTE) 0xBF) {chefled =} bis.reset () {int len = 0; {loc ++; <= 0xdf <= 0xdf <= 0xdf <= 0xdf <= 0xdf <= 0xdf) {read = bis.read () (0x80 <= read <= 0xbf) // dual bytes (0xc0-0xdf); 0x80-0xbf) 또는 계속 될 수 있습니다 = read && read <= 0xbf) {charset = "utf-8";} els break;} //textlogger.getLogger () .info (loc + "" "" "" "" ".} els break; + integer.tohexstring (read);}} catch (예외 e) {e.printstacktrace ();} 최종 {if (bis! = null) {try {bis.close ();} catch ption ex) {}}} RETURN charset;} private static string getencode (int flag1, int flag2, int flag3) {String encode = "" ""; -8) if (flag1 == 255 && flag2 == 254) {encode = "unicode"{encode = "utf-16";} else if (flag1 == 239 && flag3. == 191) {encode = "utf8";} else {encode = "asci";2) 파일의 인코딩 형식을 통해 파일 흐름을 읽습니다.
/*** 파일의 내용은 경로를 통해 캐리어로 사용됩니다. ! */ public static string readfile (String path) {string data = null; string code = fileencode.getfileencode (path) isr = null; 환경은 // code = system.getProperty ( "file.encoding")를 의미하지는 않습니다. 1; char [] 새 문자 , length);} data = new String (sb);} catch (예외 e) {e.printstacktrace (); "getfile io 예외 :"+e.getMessage ()); (isr! = null) {isr.close ();}} catch (ioexception e) {e.printstacktrace (); }3) 파일에 지정된 형식을 통해 파일 작성
/*** 지정된 경로 및 인코딩 형식에 따라 파일을 저장하십시오. 텍스트 내용, 보안 방법 * * @param data * 파일에 작성된 바이트 데이터 * @param path * 파일 이름 * @return boolean * 작성이 완료되면 true로 돌아갑니다. / public static boolean writefile (byte data [], 문자열 코드) {boolean flage = onull; = 새 파일 (file.get parent ()); i f (! file .exists ()) {file.mkdirs ();}} if ( "asci".equals (code)) {code = "gbk"; } OSW = New OutputStreamWriter (Path), Code (data, code); info ( "tofile io 예외 :"+e.getMessage ());} 마지막으로 {try (osw! = null) {osw.close ();}} catch (ioexception e) {e.printstacktrace (); log.indo ( "tofile io 예외 :"+e.getmes sage ()) ;;}} return flag;}4) 이진 파일과 Word Documentation 등과 같은 컨텐츠가 거의 없으면 다음 방법으로 파일을 읽고 쓸 수 있습니다.
/** * 지정된 경로에서 바이트 배열로 파일 읽기 일부 비 텍스트 형식 컨텐츠 * 457364578634785634534 * @Param Path * 파일 경로에 대해이 메소드를 선택할 수 있습니다. 바이트 바이트 바이트 바이트 바이트 바이트 바이트 바이트 바이트에 의한 바이트 바이트에 의한 바이트 바이트 바이트 바이트 바이트 바이트 바이트 바이트 바이트에 의한 바이트 바이트에 의한 바이트에 의해 바이트에 의해 바이트 바이트에 의해 바이트 바이트가 바이트 (public static byte) [] getfile (String Path). fileInputStream 스트림 = 새로운 FileInputStream (Path); 새로운 바이트 [size]; stream.Read (data); stream.close (); 해당 파일의 바이트 컨텐츠는 일부 비 텍스트 파일에 사용될 수 있습니다. * @param data * am * @param path * 文件路径, 包含文件名 * @return boolean isok 当写入完毕时返回 * @throws 예외 */ public static boolean tofile. BYTE Data []는 예외적 인 경우 {path.write (out);위는이 기사의 모든 내용입니다.