JAVA逐行讀取指定檔案中的內容,每行中的不同內容用任意個空格分開。
阿新 • • 發佈:2019-02-05
檔案中的內容格式為(中間可以用任意個空格隔開):
1 張三 品德優良
a JACK SMArt
package ReadFileLine;/*
Readline類儲存檔案中每行中不同模組的資訊,並以類似指標的方式儲存每一行
*/
public class Readline {
public String numv1;
public String namev2;
public String deswe;
private Readline next;
public Readline() {
numv1="-1";
namev2="-1";
deswe="-1";
next=null;
}
public Readline(String n,String n1,String n2) {
numv1=n;
namev2=n1;
deswe=n2;
next=null;
}public void setNext(Readline next) {
this.next=next;
}
public Readline getNext() {
return next;
}
}
/*
主檔案測試讀取情況
*/
package ReadFileLine;
import java.io.BufferedReader;import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Scanner;
public class ReadFile {
public static Readline readl=new Readline();
public static int readFileByLines(String fileName) throws IOException {
//返回檔案中的行數,並將檔案中的相應資訊儲存在以readl為頭節點的連結串列中。
File file = new File(fileName);
BufferedReader reader = null;
Readline q=readl;
int line=0;
reader = new BufferedReader(new FileReader(file));
String tempString = null;
// 一次讀入一行,讀取一行執行一次while迴圈,直到讀入null為檔案結束
while ((tempString = reader.readLine()) != null) {
String[] arr = tempString.split("\\s+");//遇到空格時,將空格後的內容給下一個arr陣列單元
//列如讀取第一行後,arr[0]為1,arr[1]為張三,arr[2]為品德優良
String num=arr[0];
String name=arr[1];
String des=arr[2];
q.numv1=num;
q.namev2=name;
q.deswe=des;
Readline p=new Readline();
//此處必須新建個節點,否則直接q=q.getNext()時會連線空節點出錯
q.setNext(p);q=q.getNext();
line++;
}
reader.close();
return line;
}
public static Readline getLine(int n)//查詢檔案第n+1行中的相應內容,返回儲存第n+1行內容的Readline物件
{
//System.out.println(sVex[nVex].name+" "+sVex[nVex].desc);
Readline r=readl;
for(int i=0;i<n;i++) {
r=r.getNext();
}
return r;
}
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
System.out.println("輸入路徑");
//ReadFile readfile=new ReadFile();
String path=scan.next();
System.out.println("行數為:"+readFileByLines(path));
System.out.println("請輸入要查詢的行數:");
//注意:
int n=scan.nextInt();
Readline r=getLine(n);
System.out.println("編號:"+r.numv1+" 姓名:"+r.namev2+" 描述:"+r.deswe);
}
}