我目前正在尝试弄清楚如何在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(",");
}
}
}
答案 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唯一的问题是你不知道你需要多大的数组。我建议您将输入存储在动态分配空间的数据结构中,例如LinkedList
或UnboundedStack
。
答案 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();
}