Xav*_*ier 5 java filereader bufferedreader
这是我的方法
public void readFile3()throws IOException
{
try
{
FileReader fr = new FileReader(Path3);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
int a =1;
while( a != 2)
{
s = br.readLine();
a ++;
}
Storage.add(s);
br.close();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
由于某些原因,我无法读取仅包含以下文件:“名称为Intel(R)Core(TM)i5-2500 CPU @ 3.30GHz”
当我调试代码时,String s返回为“ \ ufffd \ ufffdN am e”,我不知道这些多余字符来自何处。.这使我无法正确读取文件。
\ ufffd是unicode中的替换字符,当您尝试读取没有unicode表示形式的代码时使用。我想您是在Windows平台上(或者至少您读取的文件是在Windows上创建的)。Windows支持多种格式的文本文件,最常见的是Ansi:每个字符都可以表示,但是其ansi代码却可以。
但是Windows可以直接使用UTF16,其中每个字符由其Unicode代码表示为16位整数,因此每个字符2个字节。这些文件使用特殊标记(Windows方言中的字节顺序标记)表示:
(参考:在MSDN上使用字节顺序标记)
当您在前两个替换字符之后N a m e而不是之后书写时Name,我想您有一个UTF16编码的文本文件。记事本可以透明地编辑那些文件(甚至不说您的实际格式),但是其他工具确实存在这些问题。出色的vim可以读取具有不同编码的文件并在它们之间进行转换。
如果要直接在Java中使用此类文件,则必须使用UTF-16字符集。从JaveSE 7 javadoc开始Charset:UTF-16十六位UCS转换格式,字节顺序由可选的字节顺序标记标识