![](/img/trans.png)
[英]How to read from text file, split strings from integers and then pass integers into an arraylist?
[英]How to read in a text file with integers and Strings to an array
我在一個帶有Integers和Strings的文本文件中讀過,我需要使用所有四條信息來計算:
我應該使用什么樣的數組來執行此操作以及如何實現它? 這是我正在努力的部分。
這是我到目前為止所擁有的:
import java.io.File;
import java.util.Scanner;
public class TextFile {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(new File("JobQueue.txt"));
String jobName;
int arrivalTime;
int cpuTime;
String pageFault;
while (input.hasNext()) {
jobName = input.next();
arrivalTime = input.nextInt();
cpuTime = input.nextInt();
pageFault = input.next();
System.out.printf("\n%s %d %d %s\n", jobName, arrivalTime, cpuTime, pageFault);
}
}
}
編輯於04/22:
例外:
java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at TextFile.main(TextFile.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
這是我到目前為止所做的代碼:
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
public class TextFile {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(new File("JobQueue.txt"));
ArrayList<DataObject> list = new ArrayList<DataObject>();
while (input.hasNext()) {
String jobName = input.next();
int arrival = input.nextInt();
input.nextLine();
int cpuTime = input.nextInt();
input.nextLine();
String inturrupt = input.next();
DataObject data = new DataObject(jobName, arrivalTime, cpuTime, pageFault);
list.add(data);
}
}
}
和:
public class DataObject {
private String jobName;
private int arrivalTime;
private int cpuTime;
private String pageFault;
public DataObject(String job, int arrival, int cpu, String interrupt) {
jobName = job;
arrivalTime = arrival;
cpuTime = cpu;
pageFault = interrupt;
}
public void setjobName(String job) {
jobName = job;
}
public String getJobName() {
return jobName;
}
public void setArrivalTime(int arrival) {
arrivalTime = arrival;
}
public int getArrivalTime() {
return arrivalTime;
}
public void setcpuTime(int cpu) {
cpuTime = cpu;
}
public int getcpuTime() {
return cpuTime;
}
public void setPageFault(String interrupt) {
pageFault = interrupt;
}
public String getPageFault() {
return pageFault;
}
public String toString() {
return String.format("\n%s %d %d %s\n", getJobName(), getArrivalTime(), getcpuTime(), getPageFault());
}
}
編輯#2
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
import java.io.IOException;
public class TextFile
{
public static void main(String[] args) throws IOException
{
Scanner input = new Scanner(new File("JobQueue.txt"));
ArrayList<DataObject> list = new ArrayList<DataObject>();
while(input.hasNext())
{
String jobName = input.next();
int arrivalTime = input.nextInt();
int cpuTime = input.nextInt();
String pageFault = input.next();
DataObject data = new DataObject(jobName, arrivalTime, cpuTime, pageFault);
list.add(data);
}
}
}
SAMPLE JOB QUEUE:
J1 0 90 "7,27,73,86"
J2 1 39 "12"
J3 2 195 "11,31,73,94,120,134,183"
J4 3 198 "7,25,57,83,112,138,190"
J5 4 103 "11,26,58,94"
J6 5 158 "15,39,63,79,120,144"
J7 6 168 "9,46,66,84,125,147"
數據庫ORM樣式的方法是創建一個表示文件中每一行的類:
public class RecordObject {
private String jobName;
private int arrivalTime;
private int cpuTime;
private String pageFault;
public RecordObject(String jobName, int arrivalTime, int cpuTime, String pageFault) {
this.jobName = jobName;
this.arrivalTime = arrivalTime;
this.cpuTime = cpuTime;
this.pageFault = pageFault;
}
// getters and setters
}
然后創建一個ArrayList
來存儲文件中的任意行數:
ArrayList<RecordObject> list = new ArrayList<RecordObject>();
while(input.hasNext()) { // <-- this is your original code
jobName = input.next();
arrivalTime = input.nextInt();
cpuTime = input.nextInt();
pageFault = input.next();
RecordObject record = new RecordObject(jobName, arrivalTime, cpuTime, pageFault);
list.add(record);
}
讀完整個文件后,可以像這樣迭代ArrayList
:
for (RecordObject record : list) {
// compute throughput, average waiting time, etc...
}
這解決了您收到錯誤的原因。 試試這個:
//main
while (input.hasNext()) {
String jobName = input.next();
int arrival = input.nextInt(); // assumes this is your arrivalTime
int cpuTime = input.nextInt();
String inturrupt = input.next(); //assuming this is your pageFault
DataObject data = new DataObject(jobName, arrival, cpuTime, inturrupt);
list.add(data);
input.nextLine(); // advance input file to the next line
}
此代碼僅在讀取每行上的4個令牌時才使輸入文件前進。 如果您的問題仍然存在,那么知道輸入文件通常是什么樣子也會很有幫助。
我真的不認為代碼會有任何問題,只需查看文本文件中的輸入以及它們如何與next()和nextInt()匹配,以便更安全,轉到BufferedReader readLine()然后執行行拆分
BufferedReader br=new BufferedReader(new FileReader("G:\\Codemagic\\sample01.txt"));
String current_line=null;
while((current_line=br.readLine())!=null)
{
current_line.split().do something with this
}
通過這種方式你知道每個字符串[]中有什么
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.