我有以下代码
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)
答案 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 ="";
:)