我正在编写一个Android应用程序,我想将数据保存在txt文件中并覆盖旧数据。
文件应如下所示: file content
我想在按下按钮后覆盖某些行。 他们会打电话给
writeFileData("002",0); //write 002 in line 0
该功能如下:
public void writeFileData(String data, int line) {
String buffer;
BufferedReader br = null;
FileOutputStream fos = null;
String[] lines = new String[999];
try {
File file = new File(getFilesDir().getAbsolutePath() + File.separator + "data.txt");
if(!file.exists())
{
try
{
if(file.createNewFile())
{
Toast.makeText(BaseActivity.this, "File was created", Toast.LENGTH_LONG).show();
}
}
catch(Exception ex)
{
Log.e("Error creating file", ex.getMessage());
}
}
fos = new FileOutputStream(file, false);
FileReader fr = new FileReader(file);
br = new BufferedReader(fr);
int i = 0;
while (i < 8)
{
buffer = br.readLine();
if (buffer != null)
{
lines[i] = buffer + "\n";
i++;
}
else
{
break;
}
}
lines[line] = data;
for(i = 0; i < lines.length; i++)
{
fos.write(lines[i].getBytes());
}
try
{
fos.flush();
fos.close();
}
catch(Exception ex)
{
Log.e("Error closing/flushing", ex.getMessage());
}
}
catch(Exception ex)
{
Log.e("Error creating streams", ex.getMessage());
}
}
我将调用放在我的启动器活动的onCreate中,但logcat告诉我: 创建流时出错 在启动我的应用程序后。
我尝试了其他几个Streams,但没有任何工作。
解决方案会很棒。 提前谢谢。
Xaver Seiringer
修改
我的logcat显示:
E /创建流的错误:尝试在空对象引用上调用虚方法'byte [] java.lang.String.getBytes()'
虽然我的文件是肯定创建的,但我尝试在每行写入111 - &gt;应该为br.readLine()
读取一些内容但实际上错误信息表明文件中没有任何内容。
EDIT2
我设置buffer =“xxx” 让程序干预第4行的内容,它说xxx, 但是我改变 buffer =“xxx”的那一刻 buffer = br.readLine 错误开始再次出现
EDIT3
我将部分代码更改为:
while(i < 8)
{
buffer = br.readLine();
if (buffer != null)
{
try {
lines[i] = buffer + "\n";
i++;
}
catch (Exception ex)
{
Log.e("Error line = buffer", ex.getMessage());
}
}
else
{
Log.e(TAG, "Nothing in Line");
i++;
}
}
现在它说我的“Nothing in line”8次,虽然我的应用程序启动后写入文件。
EDIT4
问题1解决了,但现在突然出现了:
E / myLogs:没有任何内容
Altough我在启动器活动中调用writeFullData(仅当应用程序第一次启动时)
public void writeFullData() {
FileOutputStream fos = null;
try {
File file = new File(getFilesDir().getAbsolutePath() + File.separator + "data.txt");
if(!file.exists())
{
try
{
if(file.createNewFile())
{
Toast.makeText(BaseActivity.this, "File was created", Toast.LENGTH_LONG).show();
}
}
catch(Exception ex)
{
Log.e("Error creating file", ex.getMessage());
}
}
fos = new FileOutputStream(file, false);
for(int i = 0; i < 7; i++)
{
String write = "111";
fos.write(write.getBytes());
}
try
{
fos.flush();
fos.close();
}
catch(Exception ex)
{
Log.e("Error closing/flushing", ex.getMessage());
}
}
catch(Exception ex)
{
Log.e("Error creating streams", ex.getMessage());
}
}