为什么我的viewtext没有显示任何内容?

时间:2014-12-26 20:19:49

标签: java android textview fileinputstream fileoutputstream

我正在编写一个程序,需要能够写入文本文件并在以后再次阅读。为了阅读它们,我将它们设置为viewtext。但是视图文本从不显示任何内容。我已经缩小了myReader.readLine()返回NULL,这意味着我没有在文件中写任何东西,或者更有可能,我没有正确读取文件。

非常感谢任何帮助,谢谢:)

public class openTable extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_opentable);
        File file = new File(getFilesDir()+"/table.xml");

        try {
            file.createNewFile();
            FileOutputStream fOut = new FileOutputStream(file);
            OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
            myOutWriter.append("Test\n");   
            fOut.close();
            Toast.makeText(openTable.this,"File Written",Toast.LENGTH_SHORT).show();}
        catch (Exception e) {
            Toast.makeText(openTable.this,"File Not Written",Toast.LENGTH_SHORT).show();
        }

        Log.d("FILEDIR",getFilesDir().toString());
        TextView displayFile = (TextView) findViewById(R.id.displayFile);

        try {
            FileInputStream fIn = new FileInputStream(file);
            BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
            String aDataRow = "";
            String aBuffer = "";

            if(myReader.readLine() != null) {
                Log.d("TEST","YES");
            } else{
                Log.d("TEST","NO");
            }

            while ((aDataRow = myReader.readLine()) != null) {
                Log.d("ADATAROW",aDataRow);
                aBuffer += aDataRow + "\n";
                    Log.d("ABUFFER",aBuffer);
            }

            displayFile.setText(aBuffer);
            myReader.close();       
            Toast.makeText(openTable.this,"File Read",Toast.LENGTH_SHORT).show();}
        catch (Exception e) {
            Toast.makeText(openTable.this,"File Not Read",Toast.LENGTH_SHORT).show();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你应该改变一些事情。

  1. 在将数据读入缓冲区之前,请检查myReader.readLine()是否为null。这个if-else块的问题在于您读取了文件的第一行并丢弃了结果。请注意,readLine()会返回String。由于您只在示例中为您的文件写了一行,因此您只需将其丢弃即可获得它。 因此,请删除if-else块或将结果保存在变量中。

  2. 当您将数据写入文件时,您应该在myOutWriter.flush();之后立即致电myOutWriter.append("Test\n");。在使用流时这是一种很好的做法,可以确保您正确地编写数据。

  3. 注意:正如旁边的注释一样,因为注释中提到了这一点:在您提供的示例中,您没有将任何数据写入设备存储。因此,您的应用中不需要任何权限,因为您的所有数据都是临时的。