无法覆盖内部存储中的文件

时间:2016-03-12 15:00:15

标签: android exception filereader filewriter

我正在编写一个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());
    }

}

0 个答案:

没有答案