/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package filesort;
import java.io.File;
import java.util.Scanner;`enter code here`
import java.io.IOException;
import java.util.Comparator;
import java.util.Collections;
import java.util.ArrayList;
import java.io.PrintWriter;
/**
*/
/**
* @param args the command line arguments
*/
class recordInfo{
int studentNumber;
String firstName;
public recordInfo(int studentNumber,String firstName){
this.studentNumber = studentNumber;
this.firstName = firstName;
}
}
class firstNameCompare implements Comparator<recordInfo>{
@Override
public int compare(recordInfo t, recordInfo t1) {
return t.firstName.compareTo(t1.firstName);
}
}
class studentNumberCompare implements Comparator<recordInfo>{
@Override
public int compare(recordInfo t, recordInfo t1) {
return t.studentNumber - t1.studentNumber;
}
}
public class FileSort {
public static void main(String[] args) throws IOException{
File newfile = new File("student_record.txt");
// try{
// PrintWriter output = new PrintWriter(newfile);
// output.println("72" + "\t" +"James");
// output.println("56" + "\t" +"Mark");
// output.println("87" + "\t" +"John");
// output.println("30" + "\t" +"Phillip");
// output.println("44" + "\t" +"Andrew");
// output.close();
// }
//
// catch(IOException ex){
// System.out.printf("error \n", ex);
//
// }
try{
Scanner input = new Scanner(newfile);
try (PrintWriter output = new PrintWriter(newfile)) {
ArrayList<recordInfo> allRecords = new ArrayList<>();
String record = input.next();
while (input.hasNext()){
String[] oneRecord = record.split(" ");
int studentNumber = Integer.valueOf(oneRecord[0]);
String firstName = oneRecord[1];
allRecords.add(new recordInfo(studentNumber, firstName));
//System.out.printf("%s %s \n", studentNumber, firstName);
}
Collections.sort(allRecords, new studentNumberCompare());
for (recordInfo RecordInfo : allRecords){
output.println(RecordInfo.firstName);
output.println("\t" +RecordInfo.studentNumber);
output.println("\n");
System.out.println(" " + RecordInfo.studentNumber + " " + RecordInfo.firstName);
}
output.close();
}
}
catch(IOException ex){
System.out.printf("error \n", ex);
}
}
}
基本上,代码是按照升序排列的学号对名为student_records.txt的文件中的记录进行排序。现在,我收到了这个错误:
线程“main”中的异常java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:907)at java.util.Scanner.next(Scanner.java:1416)at filesort.FileSort.main(FileSort.java:79)Java结果:1
另外,student_records.txt为空。 :/有人可以帮我吗?
答案 0 :(得分:1)
尝试更改:
String record = input.next();
while (input.hasNext()){
为:
while (input.hasNext()){
String record = input.next();
答案 1 :(得分:0)
移动
try (PrintWriter output = new PrintWriter(newfile)) {
就在输出循环之前,这就是在扫描之前清空文件的内容
并将Scanner更改为BufferedReader(来自FileReader)并使用readline,因为Scaner接下来会给一个令牌。