Проблемы с чтением текста из файла - PullRequest
0 голосов
/ 05 июля 2011

Я пытаюсь прочитать текст из файла .txt, вот мой код:

String filePath = bundle.getString("filepath");

        StringBuilder st = new StringBuilder();

        try {
            File sd = Environment.getExternalStorageDirectory();
            File f = new File(sd, filePath);
            FileInputStream fileis = new FileInputStream(f);
            BufferedReader buf = new BufferedReader(new InputStreamReader(
                    fileis));
            String line = new String();
            while ((line = buf.readLine()) != null) {
                st.append(line);
                st.append('\n');
            }
            Log.i("egor", "reading finished, line is " + line);
        } catch (FileNotFoundException e) {
            Log.i("egor", "file not found");
        } catch (IOException e) {
            Log.i("egor", "io exception");
        }

        reader.setText(st.toString());

Текст выглядит так:

Это образец текста для проверки

Файл .txt создается в блокноте Windows.

И вот что я получаю:

enter image description here

Что не так с моим кодом? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 05 июля 2011

Файл в формате utf-8 (юникод)? По какой-то причине Блокнот всегда добавляет метку порядка байтов к файлам Юникода, даже если порядок байтов не имеет значения. Когда интерпретируется как ASCII или ANSI, спецификация будет рассматриваться как несколько символов. Возможно, именно это и является причиной вашей проблемы.

Если это так, решение состоит в том, чтобы использовать более компетентный текстовый редактор, чем Блокнот, или написать код, который сначала проверяет спецификацию во всех файлах Юникода.

Если для вас ничего из этого не имеет смысла, попробуйте поискать «юникод» и «метку порядка байтов».

1 голос
/ 05 июля 2011

Вместо этого оберните объект FileReader в объект BufferedReader. http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileReader.html

File sd = Environment.getExternalStorageDirectory();
File file = new File(sd, filePath);
BufferedReader br = new BufferedReader(new FileReader(file));

String line = "";

while ((line = br.readLine()) != null) {
    st.append(line);
    st.append("\n");
}

br.close();
0 голосов
/ 05 июля 2011

Попробуйте с помощью следующего кода

File f = new File(str);
FileInputStream fis = new FileInputStream(f);
        byte[] mydata1 = new byte[(int) f.length()];
        fis.read(mydata1);
System.out.println("...data present in 11file..."+new String(mydata1));
...