这是我的家庭作业:
在DOTOR类中编写一个名为
readInEntrants()
的公共实例方法,该方法不带任何参数且不返回任何值。该方法将需要从文件entrants.txt中读取。该方法的代码应执行以下操作。
- 提示用户选择适当的文本文件。
- 充分利用
BufferedReader
和Scanner
对象来逐行读取文件。- 在读取每行(包含
Entrant
的名称及其汽车类别)时,应创建一个新的Entrant对象,并使用在该行中找到的值来设置其实例变量。您的代码可能假定提供的所有输入均有效。最后,应将Entrant实例添加到实例变量entrants引用的列表中。
代码:
import java.util.*;
import java.io.*;
import ou.*;
/**
* Class DOTOR
*
*/
public class DOTOR
{
// instance variable
private List<Entrant> entrants;
/**
* Constructor for objects of class DOTOR
*/
public DOTOR()
{
entrants = new ArrayList<>();
}
public void readInEntrants()
{
System.out.println("Choose file");
String textFileInput = OUFileChooser.getFilename();
List<Entrant> entrants = new ArrayList<>();
try
{
FileReader file = new FileReader(textFileInput);
BufferedReader buffer = new BufferedReader(file);
String fileLine = "";
Scanner lineScanner;
String racerName;
String raceNumber;
while ((fileLine = buffer.readLine())!= null)
{
lineScanner = new Scanner(fileLine);
lineScanner.useDelimiter(",");
racerName = lineScanner.next();
raceNumber = lineScanner.next();
}
buffer.close();
}
catch (Exception anException)
{
System.out.println("A read error has occurred");
}
}
}
还有一个单独的类,称为Entrant。
public class Entrant {
private String name;
private String category;
public Entrant(String name, String category) {
this.name =name;
this.category = category;
}
//getters and setters
}
文件中的行示例:
Jon Snow,R6
Mary higgins, r4
tom hopeful, r6
我被困住了。我不知道这段代码应该是什么样子。
答案 0 :(得分:1)
您可能正在寻找的是以下代码。它使用Scanner
解析文件名,并继续使用BufferedReader
读取文件。
public void readInEntrants() {
// ask for file name and create scanner to get input
System.out.println("please enter the name of the file you want read:");
Scanner scanner = new Scanner(System.in);
String fileName = scanner.nextLine();
// replace path/to/file with the actual path to the entrants.txt file
File entrantsFile = new File("path/to/file/" + fileName);
System.out.println("file name + path =" + entrantsFile);
// create buffered reader with resources and read all lines of the file
// use try-with-resources to prevent resource leakage
try (BufferedReader bufReader = new BufferedReader(new FileReader(entrantsFile))) {
String line;
while ((line = bufReader.readLine()) != null) {
// split each line in two compenents (seperated by ,)
String[] entrantInfo = line.split(",");
// turn String components to object instance
Entrant entrant = new Entrant(entrantInfo[0].trim(), entrantInfo[1].trim());
entrants.add(entrant);
}
}
catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
catch (IOException e) {
System.out.println(e.getMessage());
}
entrants.forEach(System.out::println);
}
还将toString
方法添加到您的entrant
类
public String toString() {
return "Entrant{" + "name='" + name + '\'' + ", category='" + category + '\'' + '}';
}
答案 1 :(得分:0)
是否可以粘贴您要读取的文本文件示例,以获得更具体的解决方案?我不确定它的结构。
执行以下操作,创建一个新的Scanner对象:
Scanner sc = new Scanner(new File("filename.txt"));
接下来,您可以通过逐行读取每一行来创建新的字符串
String s = sc.next();
您可以在此处创建一个新的Entrant对象,并传入字符串中的值。