我有以下代码:
File file=new File("src/com/yoznacks/main/stuff.txt"); FileInputStream foo=new FileInputStream(file); int a; while((a=foo.read())!=-1){ System.out.print((char)a); }
我的档案如下:aaaaa级但是输出是a a a a a为什么?
sr4lhrrt1#
您正在读取字节。如果文件的文本是用utf-16le编码的,那么字节将是0x61 0x00 0x61 0x00 0x61 0x00 0x61 0x00 0x61 0x00,其中0x61 as char是“a”。为了读取文本而不是字节,java使用reader而不是inputstream,同时指定字节的编码(字符集)。
try (InputStream in = getClass().getResourceAsStream("/com/yoznacks/main/stuff.txt"); InputStreamReader foo = new InputStreamReader(in, StandardCharsets.UTF_16LE)) { int a; while ((a = foo.read()) !=-1 ) { System.out.print((char)a); } System.out.println(); // Output, flush all. } // foo and in are closed. ``` `InputStreamReader` 获取一个二进制输入流,给定一个字节字符集生成unicode文本, `char` . 如果文件是应用程序的一部分(如应用程序jar中的zipped),那么它就是一个资源,可以使用 `getResource(AsStream)` .
1条答案
按热度按时间sr4lhrrt1#
您正在读取字节。如果文件的文本是用utf-16le编码的,那么字节将是0x61 0x00 0x61 0x00 0x61 0x00 0x61 0x00 0x61 0x00,其中0x61 as char是“a”。
为了读取文本而不是字节,java使用reader而不是inputstream,同时指定字节的编码(字符集)。