我正在编写一个程序,需要能够写入文本文件并在以后再次阅读。为了阅读它们,我将它们设置为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();
}
}
}
答案 0 :(得分:0)
你应该改变一些事情。
在将数据读入缓冲区之前,请检查myReader.readLine()
是否为null
。这个if-else
块的问题在于您读取了文件的第一行并丢弃了结果。请注意,readLine()
会返回String
。由于您只在示例中为您的文件写了一行,因此您只需将其丢弃即可获得它。
因此,请删除if-else
块或将结果保存在变量中。
当您将数据写入文件时,您应该在myOutWriter.flush();
之后立即致电myOutWriter.append("Test\n");
。在使用流时这是一种很好的做法,可以确保您正确地编写数据。
注意:正如旁边的注释一样,因为注释中提到了这一点:在您提供的示例中,您没有将任何数据写入设备存储。因此,您的应用中不需要任何权限,因为您的所有数据都是临时的。