【问题标题】:Problems reading text from file从文件中读取文本的问题
【发布时间】:2011-09-28 17:36:03
【问题描述】:

我正在尝试从 .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 记事本中创建的。

这就是我得到的:

我的代码有什么问题?提前致谢。

【问题讨论】:

  • 对我来说看起来像编码问题..将编码添加到新的 InputStreamReader(fileis)
  • @evilone,谢谢,我该怎么做?
  • 尝试例如添加“UTF-8”或编码您用于在记事本中保存此文本文档的内容,作为 InputStreamReader 构造函数的第二个参数,文档 - download.oracle.com/javase/1.4.2/docs/api/java/io/…

标签: android text stream inputstream


【解决方案1】:

文件是 utf-8 (unicode) 格式吗?出于某种原因,记事本总是向 unicode 文件添加字节顺序标记,即使字节顺序无关紧要。当解释为 ASCII 或 ANSI 时,BOM 将被视为多个字符。这可能是导致您的问题的原因。

如果是这样,解决方案是使用比记事本更强大的文本编辑器,或者编写代码首先检查所有 unicode 文件中的 BOM。

如果这些对您来说都没有意义,请尝试使用谷歌搜索“unicode”和“字节顺序标记”。

【讨论】:

  • 你说得对,问题出在记事本上。我已经使用 Notepad++ 创建了另一个文件,现在一切正常。感谢您的回答!
【解决方案2】:

改为将 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();

【讨论】:

  • 感谢您的回答,已经尝试过了,但它给了我相同的结果
  • @Egor:奇怪,在 Eclipse 中用该文本制作一个纯文本文件并以这种方式阅读它会给我正确的结果。
  • 似乎这是一个编码问题,我的记事本有问题。我将尝试在另一个编辑器中创建该文件。感谢您的帮助!
  • 是的,确实如此,我已经使用 Notepad++ 完成了一个文件,现在它可以正常工作了。
  • 不要使用其他编辑器创建。如果您将文本文件保存在记事本中,则可以从保存对话框中选择编码。
【解决方案3】:

试试下面的代码

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));

【讨论】:

    猜你喜欢
    • 2013-08-29
    • 2013-11-20
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多