Прочитать путь к файлу из текстового файла utf-8? - PullRequest
1 голос
/ 16 октября 2011

У меня есть текстовый файл 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, но файл действительно существует.

Если я изменяю кодировку example.txt на ANSI с помощью notepad ++, существует() вернуть true.

Я уже пытался использовать: "c:\temp\file.txt", "c:\\temp\\file.txt", "c:\\\\temp\\\\file.txt", но безуспешно.

Мне действительно нужно использовать файл как UTF8.Есть ли у вас какие-либо советы, чтобы метод exist () возвращал true?

Ответы [ 2 ]

2 голосов
/ 16 октября 2011

Notepad ++, вероятно, ставит метку порядка байтов перед файлом. Это не нужно для UTF-8 и Java не интерпретирует эту последовательность из трех символов .

Либо используйте редактор, который не использует метку порядка байтов, либо напишите строку в ANSI, если ваше имя файла не содержит символов, отличных от ASCII.

1 голос
/ 16 октября 2011

Возможно, файл на самом деле не закодирован как UTF-8.Можете ли вы распечатать действительные значения байтов символов "\" в файле?

Пока вы это делаете: InputStream.read(byte[] b) это не гарантированно считывает b.length байтов из потока,Вы должны читать в цикле и проверять возвращаемое значение метода read(), чтобы увидеть, сколько байтов было фактически прочитано в каждом вызове.

...