2016-10-14 4 views
0

j'ai un code suivantJFileChooser et la lecture du fichier Excel à l'aide JAVA

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(); 
} 
     } 

Le problème est, je suis exception quand je lance ce code avant de choisir un fichier. Je veux choisir un fichier avec FileChooser puis je retourne ce nom de fichier pour la lecture du fichier Excel. Sortie:

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) 
+1

double possible de [Exception dans le thread "principal" java.io.FileNotFoundException: Erreur] (http://stackoverflow.com/questions/13592325/exception -in-thread-principal-java-io-filenotfoundexception-error) –

+0

C'est parce que vous récupérez simplement le nom du fichier et non le chemin entier. Essayez d'utiliser: keep = selectedFile.getAbsolutePath(); – DevilsHnd

Répondre

1

L'exception FileNotFound est due à la valeur de keep encore être "" au moment où vous essayez de lire le fichier. Ceci est dû au fait que le code dans lequel vous définissez la valeur keep est dans un ActionListener sur le bouton. L'action qui déclenchera ce code (probablement un appui sur un bouton) ne s'est pas encore produite.

Essayez ceci:

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 
0

le problème est avec

public static String keep =""; 

lors flux d'entrée de fichier est à FileInputStream fis = new FileInputStream(excel);

il obtient Excel qui n'a pas l'emplacement du fichier; et vous jette l'exception.

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

poignée public static String keep =""; selon vos besoins :)