1. 程式人生 > >JAVA逐行讀取指定檔案中的內容,每行中的不同內容用任意個空格分開。

JAVA逐行讀取指定檔案中的內容,每行中的不同內容用任意個空格分開。

檔案中的內容格式為(中間可以用任意個空格隔開):

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("請輸入要查詢的行數:");
         //注意:
行數是從0開始的
             int n=scan.nextInt();
             Readline r=getLine(n);
             System.out.println("編號:"+r.numv1+"   姓名:"+r.namev2+"    描述:"+r.deswe);

}
}