System.out.println()如何在java中工作?

时间:2014-08-03 04:33:02

标签: java arrays excel for-loop

在下面提到的代码中,我试图从excel表中获取数据并将它们存储在数组中。我编写了代码来从我的ReadExcelData方法中的excel文件中获取数据。现在我面临的问题是在我的主要方法中,当我使用数组打印数据时,数据被多次打印。我发现,因为我已经在两个内部使用了System.out.println()来进行lop,这就是为什么它会多次打印。为了解决这个问题,我删除了System.out.println()(注释 - 在下面的代码中,粗体System.out.println()是我从ReadExcelData方法中删除的那个)一旦我做了,我就无法得到任何输出。请告诉我应该怎样做才能从ReadExcelData中获取数据而不打印它,因为我想在我的main方法中打印数据。

package com.selenium; 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;

@SuppressWarnings("unused")
public class ReadExcelData {
 static String[] data = new String[15];
  public String getData() throws InvalidFormatException, IOException{
   String data="Initial";
    File file = new File("C:\\Users\\Admin\\Desktop\\ScreenShot\\Excel.xls");
    FileInputStream input = new FileInputStream(file);
    Workbook work = WorkbookFactory.create(input);
    Sheet sheet = work.getSheet("Data");
    int rownum=sheet.getLastRowNum();
    //System.out.println("Row number = "+rownum);
     for(int i=0;i<rownum+1; i++){
       Row row=sheet.getRow(i);
       if(row != null){
           for(int j=0; j<row.getLastCellNum();j++){
       //System.out.println(row.getLastCellNum());
        if(row.getCell(j) != null){
             data = row.getCell(j).getStringCellValue();
             if(data != null){
                    **System.out.println(data);**
            }//if2
        }//if1
           }//for2
       }//if3   
     }//for1
     return data;
 }//getdata


public static void main(String[] args) throws InvalidFormatException, IOException{
  ReadExcelData read =new ReadExcelData();

  for(int i=0;i<data.length;i++){
         data[i]= read.getData();
      }

  }//main
}//class

Code block which is giving problem- 
 if(data != null){
                    **System.out.println(data);**
            }//if2

2 个答案:

答案 0 :(得分:1)

你正在循环调用你的方法:

 for(int i=0;i<data.length;i++){
         data[i]= read.getData();
      }

所以它打印多次。

如果您想将所有值都放在data []中,那么您应该进行以下更改

public String[] getData() throws InvalidFormatException, IOException{

    String[] data = new String[15];
    ...

    int k =0;
    ...

    String cellVal = row.getCell(j).getStringCellValue();
    if(cellVal != null){
        data[k++] = cellVal;
    }//if2

    ....

    return data;
}

从main方法只调用一次:

String[] excelData = read.getData();

答案 1 :(得分:1)

问题是,对于Object数据的每个单元格,您正在调用填充它的方法。 你有:

    data[i]= read.getData();

然后你的方法被调用了15次,打开,读取并返回整个文件15次。

只需从您的主程序中删除循环,一切都将按您的意愿运行。