【问题标题】:Retrieving data from multiple text files in java从java中的多个文本文件中检索数据
【发布时间】:2015-02-19 20:03:23
【问题描述】:

我正在尝试从多个文本文件(比如歌曲)中检索数据并将它们记录到一个数组中。问题是,所有数组值都有 LAST FILE 的值。这是部分代码

  public static Song[] retrieve(String path, String type, String g, int no)

       {
        Song[] song;
        song = new Song[no];

        Scanner s;
        String lrc = "";

        for(int i=0;i<no;i++)
        {
            try
            {
                s = new Scanner(new FileInputStream(path+"\\"+type+"\\"+g+"\\"+(i+1)+".txt"));

                song[i].artist = s.nextLine();
                song[i].title = s.nextLine();
                song[i].genre = "ARB";
                while(s.hasNext())
                    lrc = lrc + " " + s.next();
                song[i].lyrics = lrc.split(" ");
                lrc = "";
                s.close();
                /*System.out.println(song[i].artist);
                System.out.println(song[i].title);
                System.out.println(song[i].genre);
                for(int j = 0; j < song[i].lyrics.length; j++)
                    System.out.print(song[i].lyrics[j]+" ");
                System.out.println("")*/

            } catch(FileNotFoundException e)
            {
                System.out.println("File not found");
            }
        }

        return song;
    }

【问题讨论】:

  • 这里您仅从单个文件中获取输入,因此您将仅从单个文件中获取它。
  • 请把你调用这个函数的行也贴出来
  • 是否使用您已注释掉的 println 语句在 for 循环中正确打印信息?
  • 歌曲[]歌曲; //song = 新歌[20]; song = retrieve("D:\\workspace\\464\\src\\pkg464\\Songs","Train","ARB",20);
  • 是的,它正确输出每个数组点中最后一个文件的数据

标签: java arrays io inputstream


【解决方案1】:

您尚未包含所有方法的代码。您发布的代码会抛出 NullPointerException,因为new Song[no] 创建了一个新数组,其值全部为空。第一次遇到song[i].artist = … 时,song[i] 为 null 并抛出异常。

我的猜测是你的实际代码(我们看不到)只调用了一次new Song(),然后正在做这样的事情:

Song newSong = new Song();
for (int z = 0; z < no; z++) {
    song[z] = newSong;
}

这会导致数组的所有元素都指向 same 实例。它不会创建 20 个 Song 对象,它只会创建对一首 Song 的 20 个引用。因此,您的循环访问的是正确的数组元素,但每次,该数组元素都指向同一个 Song 对象。

正确的做法是将这一行放入你的循环中:

song[i] = new Song();

【讨论】:

    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    相关资源
    最近更新 更多