簡體   English   中英

像csv文件一樣在java中讀取文本文件

[英]reading text file in java like csv file

我在遍歷文件數組時遇到問題。

這是閱讀代碼:

public static  ArrayList<String> readData(int colNo)  {

        Scanner sca;
        try {
            sca = new Scanner(new File("txt1.txt"));
            while(sca.hasNext()) {
                String  data=sca.next();
                String[] value=data.split(",");
                System.out.println(value[colNo]);
            }
            sca.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;


    }

顯示它將如何工作的圖像:

在此處輸入圖片說明

這是主要的:

public static void main(String[] args) {

         ArrayList<String> Firstrow=readData(0);

        for( int i=0; i<Firstrow.size();i++) {
            System.out.println(Firstrow);
        }
    }

這是讀取文件時數據的格式:

喬恩,1266$,level5
史密斯,1060 美元,3 級
羅尼,1686$,level6

當我在main運行代碼並調用第一行時,它必須是這樣的:

喬恩
史密斯
羅尼

因此,當它到達forfor它應該停下來並說關於第一行。

我知道有一種方法可以解決它,例如將讀取的內容存儲在數組中,但我不知道該怎么做。 (我認為閱讀方法不是正確的方法。)

我在Excel做了同樣的事情並且它有效:

public static  ArrayList<String> readExcelData(int colNo)  {
        try {
        FileInputStream fis= new FileInputStream("dat.xls");
        HSSFWorkbook wb=new HSSFWorkbook(fis);
        HSSFSheet s=wb.getSheet(shnum);
        Iterator<Row> rowIterator=s.iterator();
        rowIterator.next();
        ArrayList<String> list=new ArrayList<String>();
        DataFormatter formatter = new DataFormatter();

        while (rowIterator.hasNext()) {
             String val = formatter.formatCellValue(rowIterator.next().getCell(colNo));
            list.add(val);
        }
        System.out.println("List :::"+list);
        return list;
        }catch(Exception e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
        }
        return null;
    }

我不確定我是否正確理解您的問題,但是如果您嘗試逐行打印文件,請嘗試使用 bufferedReader 和 readLine():

FileReader fr = new fileReader(“filename”); 
BufferedReaderbr = new BufferedReader(fr);
string l; 
l = br.readLine();

然后,

    while((l = br.readline())(=null) {
}

當沒有更多要讀取的行時,bufferedReader 流方法 readLine() 返回空值。 希望這有幫助!

這是我的問題的解決方案,並且有效。 希望它可以幫助其他人。

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    ArrayList < String > empname = new ArrayList < String > ();
    ArrayList < String > empsalary = new ArrayList < String > ();
    loadData(empid, empname, empsalary);

    for (int i = 0; i < empname.size(); i++) {
        //do some event here
    }

}


public static void loadData(ArrayList < String > empid, ArrayList < String > empname, ArrayList < String > empsalary) {

    try {
        File file = new File("empdata.txt");
        Scanner scanner = new Scanner(file);

        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            String tokens[] = line.split("\\|");
            empid.add(tokens[0].trim());
            empname.add(tokens[1].trim());
            empsalary.add(tokens[2].trim());

        }

        scanner.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM