我有一个UTF-8文本文件example.txt
,其中包含:
c:/temp/file.txt
我使用这种方法阅读文件内容:
public static String fileToString(final File file, final String charset) throws AppServerException
{
final byte[] buffer = new byte[(int) file.length()];
FileInputStream fileInputStream = null;
try
{
fileInputStream = new FileInputStream(file);
fileInputStream.read(buffer);
}
catch (final FileNotFoundException e)
{
throw new AppServerException(e.getMessage());
}
catch (final IOException e)
{
throw new AppServerException(e.getMessage());
}
finally
{
FileHelper.close(fileInputStream);
}
try
{
return new String(buffer,charset);
}
catch (UnsupportedEncodingException e)
{
throw new AppServerException(e.getMessage());
}
}
然后我想检查文件c:/temp/file.txt
是否存在:
String content = fileToString("example.txt","UTF8");
File file = new File(content );
System.out.println(file.exists());
exits()
返回false,但文件确实存在。
如果我使用notepad ++将example.txt的编码更改为ANSI,则exists()将返回true。
我已经尝试过使用:
"c:\temp\file.txt"
,
"c:\\temp\\file.txt"
,
"c:\\\\temp\\\\file.txt"
,
但没有成功。
我真的需要将该文件用作UTF8。你有提示所以方法exists()返回true?
答案 0 :(得分:2)
Notepad ++可能会在文件前放置一个Byte Order Mark。对于UTF-8和Java does not interpret this sequence of three characters,这是不必要的。
如果您的文件名不包含任何非ASCII字符,请使用不使用字节顺序标记的编辑器或在ANSI中写入字符串。
答案 1 :(得分:1)
也许该文件实际上并未编码为UTF-8。你能打印文件中“\”字符的实际字节值吗?
当你在它时:InputStream.read(byte[] b)
不保证从流中读取b.length
个字节。您应该在循环中读取并检查read()
方法的返回值,以便查看每次调用中实际读取的字节数。