Java 读取记录文件并为其创建索引
因此,我需要从一个记录文件中读取,其中确定了一个记录的结尾和一个字段的结尾,如:9783642217074 | Interaction | Macie | Furtado,Elizabeth | Winckler,Marco | 2011 然后我只需要在另一个文件中写入每条记录的第一个字段。 我正在尝试使用Java I/O RandomAccessFile,但我确实需要一些知识来理解它。 如果有人能说出这背后的方法或想法,我将不胜感激。您不需要RandomAccessFile,您可以一个字符一个字符地读写您的文件 您的程序可以处于以下三种状态之一: 正在等待下一条记录的开始 编写第一个字段的内容 等待记录的结束 程序按如下方式更改其状态: 最初,它处于1号状态 当在状态1中检测到字符时,状态变为2 在状态2中检测到|时,状态变为3 当在状态3中检测到时,状态变为1。 在状态2中接收的每个字符都复制到输出文件中 当状态从3转换为1时,在输出中写入分隔符。Java 读取记录文件并为其创建索引,java,file,records,Java,File,Records,因此,我需要从一个记录文件中读取,其中确定了一个记录的结尾和一个字段的结尾,如:9783642217074 | Interaction | Macie | Furtado,Elizabeth | Winckler,Marco | 2011 然后我只需要在另一个文件中写入每条记录的第一个字段。 我正在尝试使用Java I/O RandomAccessFile,但我确实需要一些知识来理解它。 如果有人能说出这背后的方法或想法,我将不胜感激。您不需要RandomAccessFile,您可以一个字符一个
这对于使用从文件读取的单个循环和少量if-then-else语句编写代码来说应该非常简单。在循环外创建一个名为state的变量,将其设置为1,打开输入和输出文件,并创建一个循环以逐个字符读取输入,直到到达文件末尾。下面是使用Scanner类的一个实现 主类
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// The path of the project
String basePath = new File("").getAbsolutePath();
// The path of the record file, in relevance to <basePath>
String recordPath = basePath.concat("/RecordList.txt");
// Make sure that path is correct
System.out.println(recordPath + "\n");
// Store all Record objects in an array
ArrayList<Record> recordArray = new ArrayList<Record>();
// Lets try to read the file, and parse each line at a time
try {
// input the file content to the String "input"
BufferedReader file = new BufferedReader(new FileReader(recordPath));
// Store every line of <file> in <input> String
String line;
String input = "";
while ((line = file.readLine()) != null) {
input += line + '\n';
// Remove the # symbols at beginning and end
line = line.replaceFirst("#", "");
System.out.println(line);
//
String recordData[] = line.split("[|]");
Record record = new Record(recordData);
recordArray.add(record);
}
// Make sure to close the <file>
file.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println();
//Verify results
for (Record record : recordArray) {
System.out.println(record.toString());
}
}
}
这是我生成的RecordFile.txt,它包含了我编的数据
#9783642217074|Interaction|Macie|Furtado,Elizabeth|Winckler,Marco|2011#
#9783612343243|Interaction|Freddie|Fuder,Franscon|Winner,Marie|2013#
#9213432423534|Interaction|Jimbo|Furtado,Melo|Yakasabi,Johnson|2001#
一如既往,请使用我的代码作为参考。最好是自己学习如何编写代码,尤其是当这个问题涉及家庭作业时。好的,逐行阅读文件并解析字符串。或者,如果记录可能跨行读取多行或整个文件,然后进行解析。如果输入是文本文件,并且记录是分隔的,而不是固定大小的文件,您不需要随机访问文件-逐字读取文件行就足够了。请注意,发布一个现成的解决方案来解决海报中的问题通常会对他们和他们的老师造成伤害。对问题给出提示或提供关键见解都可以,但解决方案应该是他们的,而不是别人的。
#9783642217074|Interaction|Macie|Furtado,Elizabeth|Winckler,Marco|2011#
#9783612343243|Interaction|Freddie|Fuder,Franscon|Winner,Marie|2013#
#9213432423534|Interaction|Jimbo|Furtado,Melo|Yakasabi,Johnson|2001#