Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 文本文件未正确写入和存储数据_Android_File_Read Write - Fatal编程技术网

Android 文本文件未正确写入和存储数据

Android 文本文件未正确写入和存储数据,android,file,read-write,Android,File,Read Write,我在创建和编辑文本文件时遇到一些问题。该文件似乎从未存储数据 我需要创建一个文本文件,如果有的话 没有 如果文件中有数据,请读取该数据并使其可用 存储的数据是一个由三个整数值组成的字符串,用,分隔,例如:String finalWrite=“3,5,1” 所以这个字符串需要拆分,并转换成整数,以允许添加新的计数器 这些新计数器需要写入设备上存储的文本文件中 没有错误发生,也没有强制关闭 我只能通过使用Logcat计算出这些值没有正确存储 我已经审阅了开发站点上的文档。如果有人能帮我或给我指出

我在创建和编辑文本文件时遇到一些问题。该文件似乎从未存储数据

  • 我需要创建一个文本文件,如果有的话 没有
  • 如果文件中有数据,请读取该数据并使其可用
  • 存储的数据是一个由三个整数值组成的
    字符串
    ,用
    分隔,例如:
    String finalWrite=“3,5,1”
  • 所以这个字符串需要拆分,并转换成整数,以允许添加新的计数器
  • 这些新计数器需要写入设备上存储的文本文件中
没有错误发生,也没有强制关闭

我只能通过使用Logcat计算出这些值没有正确存储

我已经审阅了开发站点上的文档。如果有人能帮我或给我指出正确的方向,我将不胜感激

我正在使用的写入方法:

public void WriteItIn() throws IOException
{
    FileOutputStream fOut = openFileOutput("stats.txt", Context.MODE_WORLD_READABLE);
    OutputStreamWriter osw = new OutputStreamWriter(fOut);
    ReadItIn(); //calls the read method, to get the values from the file
    int tmp1 = 0 + countertmp + counter;
    int tmp2 = 0 + counterpostmp + counterpos;
    int tmp3 = 0 + counternegtmp + counterneg;
    finalwrite = "" + tmp1 + "," + tmp2 + "," + tmp3;
    osw.write(finalwrite);
    osw.flush();
    osw.close();
}
读取方法:

public void ReadItIn() throws IOException
            {
                FileInputStream fIn = openFileInput("stats.txt");
                InputStreamReader isr = new InputStreamReader(fIn);
                char[] inputBuffer = new char[fIn.available()];
                isr.read(inputBuffer);
                stringFromFile = new String(inputBuffer);
                String [] tmp = stringFromFile.split("\\,");
                if(tmp.length > 0)
                {
                    Log.d("READ", " NOT NULL");
                    for(int i = 0;i<tmp.length ; i++)
                    {
                        String temper = tmp[i];
                        if(temper == null || temper == "")
                        {
                                Log.d("NULL", "NULLIFIED");
                        }
                        else
                            try
                        {
                            int x = Integer.parseInt(temper, 10);
                            if(i == 0){counter = x;}
                            else if(i == 1){counterpos = x;}
                            else if(i == 2){counterneg = x;}
                        }
                        catch(NumberFormatException e)
                        {
                            e.printStackTrace();
                        }
                    }   
                }
                else
                    Log.d("READ", "NULL");
            }
public void ReadItIn()引发IOException
{
FileInputStream fIn=openFileInput(“stats.txt”);
InputStreamReader isr=新的InputStreamReader(fIn);
char[]inputBuffer=新字符[fIn.available()];
isr.read(输入缓冲区);
stringFromFile=新字符串(inputBuffer);
String[]tmp=stringFromFile.split(“\\,”);
如果(tmp.length>0)
{
Log.d(“读取”、“非空”);

对于(int i=0;i而言,主要问题是,只要调用
openFileOutput
,stats.txt文件就会一次又一次地被删除

如果您尝试一步一步地调试代码,您可以看到,在第一次运行应用程序时,当您调用
openFileOutput
时,会创建大小为0的文件。您可以从DDMS文件资源管理器中进行检查

因此,当您读取它时,它不包含任何内容,并且
ReadItIn
也不读取任何内容。当您写入并关闭它时,您可以从DDMS文件资源管理器中看到该文件存在并且大小>0,这是正确的


但是,当您再次通过
WriteIn
时,只要调用
openFileOutput
,您就可以从文件资源管理器中看到文件大小返回到0。

因此,问题是
tmp.length是的,我尝试了两种方式拆分。我认为拆分不是问题,可能是尝试拆分
字符串at is
null
拆分一个null仍然会给你一个NullPointerException。@偶然:他说没有强制关闭,所以可能他捕捉到了异常?@Nuktu:我会尝试打印
stringFromFile
的普通内容以记录日志。首先,用
temper.equals(“)替换
temper==”
或类似。谢谢!因此我必须做一些检查,看看文件是否存在?我不知道如何使用
openFileOutput
实现这一点,因为它也需要写入文件。我不知道这个API,但从引用来看,它看起来总是会重新创建文件。如果不想重新创建它,可以向其添加write,但是我想这不是你想要的。看看其他的Android文件系统API。你能做的,就是分两个阶段:1)在需要值之前,请检查文件是否存在。2)如果存在,请打开文件进行读取,获取值并关闭。3)如果不存在,请将值指定为其默认初始值。4)然后,当您认为需要回存值时,请重新创建文件进行写入并保存值。