从utf-8文本文件中读取文件路径?

时间:2011-10-16 17:36:33

标签: java utf-8 filepath backslash

我有一个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?

2 个答案:

答案 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()方法的返回值,以便查看每次调用中实际读取的字节数。