Fileinputstream /加载一个简单的txt文件

时间:2013-11-27 04:15:58

标签: java android

有谁知道为什么会崩溃?我正在做的就是从我的原始文件夹中读取txt文件中的文件,当我单击其他活动窗口中的加载按钮时,当我在单击时调用文件读取器对象中的变量测试时,代码会中断。 log.d(null,ReadFileObject.fileText)提前谢谢!

public class ReadFile extends Activity{
public String test;
public String testing;
protected void onCreate(Bundle savedInstanceState) {
}
 public void fileText() {
    InputStream fis;
    fis =  getResources().openRawResource(R.raw.checkit);
    byte[] input;
    try {
        input = new byte [fis.available()];
        while(fis.read() != -1)
        {
            test += new String (input);
        }
        testing = test;
        fis.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println(e.getMessage());
    }catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println(e.getMessage());
}

/* InputStream fis = null;
try {
    fis = getResources().openRawResource(R.raw.checkit);
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
    String nextLine;
    int i = 0, j = 0;
    while ((nextLine = br.readLine()) != null) {
        if (j == 5) {
            j = 0;
            i++;
        }
       test += nextLine;
    }
} catch (Exception e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
} finally {
    if (fis != null) {
        try { fis.close(); }
        catch (IOException ignored) {}
    }
}*/

}
}

2 个答案:

答案 0 :(得分:0)

你的代码在这里打破了:

byte[] input;
input = new byte [fis.available()];
while(fis.read() != -1) {
    test += new String (input);
}
testing = test;
fis.close();

在Java中available()是不可靠的(read the Javadoc) ....甚至可能返回0.您应该使用类似于的循环:

InputStream fis = getResources().openRawResource(R.raw.checkit);
try {
    byte[] buffer = new byte[4096]; // 4K buffer
    int len = 0;
    while((len = fis.read(buffer)) != -1) {
        test += new String (buffer, 0, len);
    }
    testing = test;
} catch (IOException ioe) {
    ioe.printStackTrace();
    // make sure you do any other appropriate handling.
} finally {
    fis.close();
}

(尽管使用字符串连接可能不是最好的主意,但请使用StringBuilder)。

答案 1 :(得分:-1)

您的课程延伸`activityoncreate内没有任何内容。如果您需要一个简单的java程序,请尝试创建New java Project。由于您延长了activity,因此您应该setcontentview(yourLayout)。然后从oncreate调用你的method并做你的东西