Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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
Java Can';t保存列表<&燃气轮机;到sd卡_Java_Android_Save_Sd Card - Fatal编程技术网

Java Can';t保存列表<&燃气轮机;到sd卡

Java Can';t保存列表<&燃气轮机;到sd卡,java,android,save,sd-card,Java,Android,Save,Sd Card,以下是我将分数保存到最高分时所做的操作 public void save() { try { BufferedWriter fw = new BufferedWriter(new FileWriter(myDir + "/HIGHSCORE.txt")); for (Integer i : scores) { System.out.println(i); fw.write(i)

以下是我将分数保存到最高分时所做的操作

public void save() {
    try {
        BufferedWriter fw = new BufferedWriter(new FileWriter(myDir
                + "/HIGHSCORE.txt"));
        for (Integer i : scores) {
            System.out.println(i);
            fw.write(i);
            fw.newLine();
            fw.flush();
        }
        fw.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void beforeSave() {
    List<String> stringReader = new ArrayList<String>();
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(myDir + "/HIGHSCORE.txt"));
        String s = "";
        while ((s = br.readLine()) != null) {
            System.out.println("LINE: " + s + "\n");
            scores.add(Integer.parseInt(s));
        }
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
public void save(){
试一试{
BufferedWriter fw=新的BufferedWriter(新文件写入程序(myDir
+“/HIGHSCORE.txt”);
for(整数i:分数){
系统输出打印LN(i);
fw.write(i);
fw.newLine();
fw.flush();
}
fw.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
保存()之前的公共无效{
List stringReader=新建ArrayList();
BufferedReader br=null;
试一试{
br=新的BufferedReader(新的文件阅读器(myDir+“/HIGHSCORE.txt”);
字符串s=“”;
而((s=br.readLine())!=null){
System.out.println(“行:“+s+”\n”);
scores.add(Integer.parseInt);
}
}捕获(FileNotFoundException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
我有两种方法来保存和加载数据信息,在onResume()方法中使用beforeSave()和在onPause()方法中使用save()。当我调用onStop()时它会崩溃(关闭程序),我确信befoeStart()不能正常工作。我使用Scanner类,使用方法nextInt(),但它不起作用:(。当我只保存一个分数时,它就起作用了。我到底做错了什么

另外,我现在确定是否必须使用flush(),但它在吃东西之前不起作用

//丹尼尔

fw.write(i);
更改为
fw.write(i.toString());

理由:
目前,您的代码以二进制格式将值保存到文件中,但以文本格式读取值。您必须使用相同的格式来解决此问题。以文本格式保存使读取highscores.txt更容易,因此我提供了该解决方案

以下是我的测试代码:

package com.me;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Environment;
导入android.util.Log;
公共类主要扩展活动
{
私有静态字符串文件\u NAME=“HIGHSCORES.txt”;//添加此文件以提高可维护性
私有字符串myDir;
私人名单分数;
@在创建时覆盖公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//SD卡中的文件夹
myDir=Environment.getExternalStorageDirectory()+“/TwoDee”;//只是一个随机名称
//使用一些值初始化整数列表
分数=新的ArrayList();
分数。添加(新整数(5));
分数。添加(新整数(9));
分数。添加(新整数(11));
//确保有文件或我们的测试崩溃。我希望你在其他地方有类似的代码?
尝试
{
File folder=新文件(Environment.getExternalStorageDirectory(),“TwoDee”);
if(folder.exists()==false)
folder.mkdirs();
文件=新文件(文件夹、文件名);
if(file.exists()==false)
createNewFile();
}
捕获(例外e)
{
System.out.println(“Fail”);//Blunt:)
}
}
@重写公共void onResume()
{
beforeSave();
super.onResume();
}
@重写公共void onPause()
{
save();
super.onPause();
}
@覆盖顶部的公共void()
{
super.onStop();
}
公共作废保存()
{
Log.v(“TwoDee”,“save…”);
尝试
{
BufferedWriter fw=新的BufferedWriter(新文件编写器(myDir+“/”+文件名));
for(整数i:分数)
{
Log.v(“TwoDee”,i.toString());
fw.write(i.toString());
fw.newLine();
//fw.flush();//实际上不需要这样做。
}
fw.close();
}catch(filenotfounde异常)
{
e、 printStackTrace();
}捕获(IOE异常)
{
e、 printStackTrace();
}
Log.v(“TwoDee”,“save”);
}
保存()之前的公共无效
{
//List stringReader=new ArrayList();//不需要。。。
BufferedReader br=null;
Log.v(“TwoDee”、“beforeSave…”);
尝试
{
br=新的BufferedReader(新的文件读取器(myDir+“/”+文件名));
字符串s=“”;
而((s=br.readLine())!=null)
{
Log.v(“TwoDee”,s);
//System.out.println(“行:“+s+”\n”);//不需要。。。
scores.add(Integer.parseInt);
}
}捕获(FileNotFoundException e1)
{
e1.printStackTrace();
}捕获(IOE异常)
{
e、 printStackTrace();
}
Log.v(“TwoDee”,“保存之前”);
}
}

更多信息最好:分数的类型?
myDir的值
save()
只对一个分数有效还是有时对多个高分有效?当应用程序崩溃时,文件中有哪些值?给我们提供崩溃异常堆栈跟踪?向我们展示
onStop()
以及它在哪里崩溃?它是否只在
onStop()
中崩溃?是否要写入分数元素,而不是写入for循环计数器“i”的值?即每个
for循环类型的
。在循环的每个过程中,
i
将包含
scores
My fr中的下一个
Integer
对象