Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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 为什么scanner实例只读取3行代码_Java_Android - Fatal编程技术网

Java 为什么scanner实例只读取3行代码

Java 为什么scanner实例只读取3行代码,java,android,Java,Android,我正在尝试将用户选择的首选项保存到文本文件中。当我保存某个内容,然后尝试向其中添加信息时,它会被覆盖。我检查了日志,当我阅读文件检查之前是否写过任何东西时,它似乎只读取3行,尽管我检查了文件,它有6行 我调用了名为savefiles的方法,其中有一个类SoundDetails的实例,我在savefiles方法下面写了这个实例: public static void saveFiles(SoundDetails s) { try { Scanner readD

我正在尝试将用户选择的首选项保存到文本文件中。当我保存某个内容,然后尝试向其中添加信息时,它会被覆盖。我检查了日志,当我阅读文件检查之前是否写过任何东西时,它似乎只读取3行,尽管我检查了文件,它有6行

我调用了名为
savefiles
的方法,其中有一个类
SoundDetails
的实例,我在
savefiles
方法下面写了这个实例:

   public static void saveFiles(SoundDetails s) {
        try {
        Scanner readDatabasetoSave  = new Scanner(file);
        PrintWriter write = new PrintWriter(file);
        String everyThing = "";
        while(readDatabasetoSave.hasNext()){
            everyThing += readDatabasetoSave.nextLine();
            Log.e(everyThing, everyThing);
        }
        int index = everyThing.indexOf('#');

        if(index != -1){
            everyThing = everyThing.substring(0,index); 
        }
        everyThing = everyThing + s.name + "\n" +s.time + "\n" + s.onoff +"\n";
        Log.d("everything final", everyThing);
        //Log.e("everything",everyThing);
        for(boolean b : s.daysofweek){
            if(b == true){
                everyThing += "T";
            }
            else{
                everyThing += "F";
            }
        }
        everyThing += "\n";
        for(boolean b : s.sensors){
            if(b == true){
                everyThing += "T";
            }
            else{
                everyThing += "F";
            }
        }
        everyThing += "\n"+s.profile+"#";
        write.print(everyThing);
        write.close(); 
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.e("error occured", e.toString());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
}
下面是
SoundDetails
class:

public class SoundDetails {
    public boolean[] sensors ; // wifi gps 3g bluetooth airplane
    public boolean[] daysofweek ;
    public boolean onoff ;
    public String profile;
    public String name;
    public String time;
    public SoundDetails(boolean[] sensors, boolean[] daysofweek,String profile,boolean onoff,String name,String time){
        this.sensors = sensors;
        this.daysofweek = daysofweek;
        this.profile = profile;
        this.onoff = onoff;
        this.name = name;
        this.time = time;
    }
}

嗯,不用深入探讨这个问题,问题可能是你在使用indexOf

    int index = everyThing.indexOf('#');

    if(index != -1){
        everyThing = everyThing.substring(0,index); 
    }
…根据代码的其余部分判断,我认为您实际上正在查找最后一个索引:

    int index = everyThing.lastIndexOf('#');

    if(index != -1){
        everyThing = everyThing.substring(0,index); 
    }
此外,通常最好在关闭流之前冲洗流:

    write.print(everyThing);
    write.flush(); //since the printwriter you're using does not autoflush
    write.close(); 

如果你问题中的第一行是准确的(“我试图将用户选择的首选项保存到文本文件中”),那么我想知道你是否只是做了太多的工作


您不使用内置的首选项管理器ala有什么具体原因吗?

顺便说一句,我的txt文件看起来像这个名字12:30(这是时间,但它写为字符串)false(也是字符串)TFTFFFTF(T和F表示True或false)FFFFF 0#(哈希标记表示第一个设置完成,下一个txt表示第二个设置pref)日志语句的结果是什么?这不重要,但由于使用了nextLine(),如果不起作用,则应使用hasNextLine(),您可能希望在完成读取后关闭扫描仪,然后创建PrintWriter以写入文件。在您的示例中,我根本看不到扫描仪处于关闭状态。hmmm。很遗憾听到这个消息。尝试从一个文件中写入,然后从另一个文件中读取。这可能会帮助您隔离bug。用同一种方法从同一个文件中写入和读取不是你经常看到的事情。或者,简单地将这些进程拆分为两个单独的方法调用也可以帮助您隔离问题
readData
writeData
让这两个方法独立工作,我认为调试会更容易。我不知道这个类。我会看一看,但似乎我必须重写很多代码,我不想这样做。我同情a)想理解为什么你原来的代码不起作用,b)不想重写。但是,对于后一种情况,如果您决定这样做,您可能会发现您主要是在删除自己的代码。pref管理器代码需要的代码非常少。从长远来看,用更少的代码来做同样的事情几乎总是更好的。祝你好运。很高兴听到你找到了解决办法。上面的一个答案有用吗?如果是,请将其标记为您选择的答案。如果没有,如果您可以添加一个答案,其中至少包含您为解决问题所做的快速概述,那就太好了。