从文件中读取文本的问题

时间:2011-07-05 11:15:25

标签: android text stream inputstream

我正在尝试从.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 个答案:

答案 0 :(得分:1)

改为在BufferedReader对象中包装FileReader对象。 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();

答案 1 :(得分:1)

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

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

如果这对您没有任何意义,请尝试使用Google搜索“unicode”和“字节顺序标记”。

答案 2 :(得分:0)

尝试使用以下代码

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