0

我目前正在尝试弄清楚如何.txt在 Java 中读取文件并将其保存到动态数组中,但我不知道如何将读取的.txt文件保存到数组中。我要读取的文件名为songCollection.txt.

具体的数据部分需要是:

title,artist,genre,album,songID

以下是我当前的代码,任何帮助将不胜感激。谢谢

代码:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*;
import java.io.*;


public class song {
    private int SongID; // The unique song identifier
    private String title; // The song title
    private String artist; // The song artist
    private String genre; // The genre of the song
    private String album; // The album name
    private String songData;

    public song() {
        // TODO Auto-generated constructor stub 
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            FileInputStream fstream = new FileInputStream("songCollection.txt");
            // use DataInputStream to read binary NOT text
            // DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String strLine;

            while ((strLine = br.readLine()) != null) {
                String[] splitOut = strLine.split(", ");
                for (String token : splitOut)
                    System.out.println(token);
            }
            in.close();
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
        Readable fileSong;
        String[] songData = new Scanner(fileSong);

        while (songData.hasNextLine()) {
            String songCollection = songData.nextLine();
            songData = songCollection.split(",");
        }

    }
}
4

5 回答 5

0

您应该将Song类​​的构造函数定义为:

public Song(int songId, String title, String artist, String genre,
        String album, String songData) {
    this.songId = songId;
    this.title = title;
    this.artist = artist;
    this.genre = genre;
    this.album = album;
    this.songData = songData;
}

这是一个BufferedReader将所有歌曲行读入列表的示例(此代码需要 Java7):

List<Song> songs = new ArrayList<>(); // List of Song objects

try (BufferedReader input = new BufferedReader(new InputStreamReader(
        new FileInputStream("songCollection.txt"), Charset.forName("UTF-8")))) {
    String line;
    while ((line = input.readLine()) != null) {
        String[] arr = line.split(",");
        songs.add(new Song(Integer.parseInt(arr[0]), arr[1], arr[2], arr[3],
            arr[4], arr[5])); // <- Add new Song to list.
    }
} catch (IOException e) {
    e.printStackTrace();
}

现场示例:http: //ideone.com/HFn4jY

于 2013-10-25T01:05:40.933 回答
0
String temp = "";
try{
    Scanner input = new Scanner("yourfile.txt");
    while(input.hasNext()){
        temp = temp + "_" + input.next();
    }
    input.close();
}
catch(Exception e){
}
String fin[] = temp.split("_");
于 2013-10-25T00:31:51.120 回答
0

我不确定你到底在看什么。但是,如果您只是想在其中存储数据,那么您可以将字符串数组存储在 ArrayList 或任何适合您的集合中。如果您想稍后使用它进行快速检索,您可以使用任何映射实现来存储键值对

于 2013-10-25T00:29:15.203 回答
0

问题:“我不知道如何将读取的 .txt 文件保存到数组中”

答:
大多数文本文件都可以使用简单的Scanner. 例如:

Scanner input = new Scanner(fileName);
int[] ints = new int[10];
int i = 0;
while (input.hasNextInt()) { 
   input.nextInt() = ints[i];
   i++
}
input.close()

您的方法的唯一问题是您不知道需要多大的阵列。我建议您将输入存储在动态分配空间的数据结构中,例如 aLinkedList或 an UnboundedStack

于 2013-10-25T00:29:33.500 回答
0

与其将令牌打印到控制台,不如创建一个新的 Song 实例并为其设置值:

song s = new song();
s.SongId = Integer.parseInt(splitOut[0]);
s.title = splitOut[1];
s.artist = splitOut[2];
...

然后把这首歌实例放到一个列表中。

还可以考虑使用所有这些字段作为参数来实现 Song 构造函数。

于 2013-10-25T00:30:23.520 回答