JFileChooser和使用JAVA从Excel文件中读取

时间:2016-10-14 09:14:37

标签: java excel filechooser

我有以下代码

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.text.html.HTMLDocument.Iterator;

    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Workbook;

  public class ExcelRead {
       public static String keep = "";

          public static void main(String[] args) throws IOException {

    // File Openner
    JFrame.setDefaultLookAndFeelDecorated(true);
    JDialog.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new JFrame("JComboBox Test");
    frame.setLayout(new FlowLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton button = new JButton("Select File");

    button.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent ae) {
            JFileChooser fileChooser = new JFileChooser();
            int returnValue = fileChooser.showOpenDialog(null);
            if (returnValue == JFileChooser.APPROVE_OPTION) {
                File selectedFile = fileChooser.getSelectedFile();

                keep = selectedFile.getName();
                System.out.println(keep);
            }
        }
    });
    frame.add(button);
    frame.pack();
    frame.setVisible(true);
    // end of the File opener
    // read from excel
    File excel = new File(keep);

    FileInputStream fis = new FileInputStream(excel);
    HSSFWorkbook wb = new HSSFWorkbook(fis);


    String sheetName = "Assignments"; //if my tempsheet start with "sheetname" thats okay

    for (int i = 0; i < wb.getNumberOfSheets() - 1; i++) {
        HSSFSheet tmpSheet = wb.getSheetAt(i);
        if (tmpSheet.getSheetName().startsWith(sheetName)) {
            //satırları ve sutunları gez oku

        } else {
                wb.removeSheetAt(i);
            }

        }


    }// end of the main




private static String cellToString(HSSFCell cell) {
    int type;
    Object result;
    type = cell.getCellType();
    switch (type) {
    case 0:
        result = cell.getNumericCellValue();
        break;
    case 1:
        result = cell.getStringCellValue();
        break;
    default:
        throw new RuntimeException("there are no support for this type of cell");
    }

    return result.toString();
}
       }

问题是,在选择文件之前运行此代码时出现异常。我想用FileChooser选择一个文件然后我返回该文件名以便从excel文件中读取。 输出:

 Exception in thread "main" java.io.FileNotFoundException: 
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at ExcelRead.main(ExcelRead.java:54)

2 个答案:

答案 0 :(得分:1)

FileNotFound异常是由于您尝试读取文件时keep的值仍为""

这是因为您设置keep值的代码位于按钮上的ActionListener中。尚未发生触发此代码的操作(很可能是按下按钮)。

试试这个:

public static void chooseFile() {
    JFileChooser fileChooser = new JFileChooser();
    int returnValue = fileChooser.showOpenDialog(null);
    if (returnValue == JFileChooser.APPROVE_OPTION) {
        File selectedFile = fileChooser.getSelectedFile();

        keep = selectedFile.getName();
        System.out.println(keep);
    }
}
public static void main(String[] args) throws IOException {

// File Openner
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("JComboBox Test");
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("Select File");

button.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent ae) {
        chooseFile()
    }
});
frame.add(button);
frame.pack();
frame.setVisible(true);
// end of the File opener
// read from excel

chooseFile() // <- make sure that the file is chosen

File excel = new File(keep);

FileInputStream fis = new FileInputStream(excel);
HSSFWorkbook wb = new HSSFWorkbook(fis);


String sheetName = "Assignments"; //if my tempsheet start with "sheetname" thats okay

for (int i = 0; i < wb.getNumberOfSheets() - 1; i++) {
    HSSFSheet tmpSheet = wb.getSheetAt(i);
    if (tmpSheet.getSheetName().startsWith(sheetName)) {
        //satırları ve sutunları gez oku

    } else {
            wb.removeSheetAt(i);
        }

    }


}// end of the main

答案 1 :(得分:0)

问题在于

 public static String keep ="";

文件输入流来自FileInputStream fis = new FileInputStream(excel);

它获得没有文件位置的excel;并抛出异常。

File excel = new File(keep);
FileInputStream fis = new FileInputStream(excel);

根据您的要求处理public static String keep ="";:)