使用Java读取和保存.txt文件到数组中

时间:2013-10-25 00:22:20

标签: java arrays

我目前正在尝试弄清楚如何在Java中读取和保存.txt文件到动态数组,我不知道如何将读取.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(",");
        }

    }
}

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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()

你的approch唯一的问题是你不知道你需要多大的数组。我建议您将输入存储在动态分配空间的数据结构中,例如LinkedListUnboundedStack

答案 2 :(得分:0)

您应该创建一个新的Song实例并为其设置值,而不是将令牌打印到控制台:

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

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

另外考虑使用所有这些字段作为参数实现Song构造函数。

答案 3 :(得分: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("_");

答案 4 :(得分: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