2012-06-28 5 views
0

J'ai développé un programme qui compte le nombre de lignes dans un fichier qui est illustré ci-dessousEn ce qui concerne JFileChooser

Scanner in=new Scanner(System.in); 
    System.out.println("Enter the Drive name like C,D,E etc"); 
    String drive=in.next(); 
    System.out.println("Enter the main folder name"); 
    String main_folder=in.next(); 
    File directory=new File(drive+":"+"//"+main_folder+"//"); 

Map<String, Integer> result = new HashMap<String, Integer>(); 
    //File directory = new File("C:/Test/"); 
    File[] files = directory.listFiles(); 
    for (File file : files) { 
     if (file.isFile()) { 
      Scanner scanner = new Scanner(new FileReader(file)); 
      int lineCount = 0; 
      try { 
       for (lineCount = 0; scanner.nextLine() != null; lineCount++); 
      } catch (NoSuchElementException e) { 
       result.put(file.getName(), lineCount); 
      } }}   

    for(Map.Entry<String, Integer> entry:result.entrySet()){ 
      System.out.println(entry.getKey()+" ==> "+entry.getValue()); 
     } 

mais je tente d'ajouter une JFileChooser d'interface swing, je veux que l'utilisateur doit sélectionner le particulier dossier et tous les fichiers à l'intérieur de ce dossier à être sélectionné et se reposer au-dessus comme mon code fonctionne comme il est, S'il vous plaît conseiller

S'il vous plaît conseiller pour la désignation du jfile chooser afin que je puisse intégrer mon code ci-dessus.

J'ai la conception d'une solution plus qui est

package aa; 

import java.awt.Container; 
import java.awt.FlowLayout; 
import java.awt.FileDialog; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 

import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class FileBrowse extends JFrame { 

private JButton browseSwing = new JButton("Choose File"); 
private JTextField textField = new JTextField(30); 
private JButton approve = new JButton("Ok"); 


public FileBrowse() { 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
setSize(600,80); 
setResizable(false); 

browseSwing.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     if (arg0.getSource()==browseSwing) 
     onBrowseSwing(); 
     }}); 


Container container = getContentPane(); 
container.setLayout(new FlowLayout()); 
container.add(browseSwing); 
container.add(textField); 
container.add(approve); 

//pack(); 
} 

protected void onBrowseSwing() { 
JFileChooser fileChooser = new JFileChooser(); 
int result = fileChooser.showDialog(this, "Open/Save"); 
if (result == JFileChooser.APPROVE_OPTION) { 
File file = fileChooser.getSelectedFile(); 
textField.setText(file.toString()); 
String x = file.toString(); 
fileRead(x); 
} 
} 

public void fileRead(String input){ 
    try{ 
     // Open the file that is the first 
     // command line parameter 
     FileInputStream fstream = new FileInputStream(input); 
     // Get the object of DataInputStream 
     DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String strLine; 
     int count = 0; 
     int count2 = 0; 
     //Read File Line By Line 
     while((strLine = br.readLine())!= null){ 
      if (strLine.trim().length() != 0){ 
       count++; 
      }else{ 
       count2++; 
      } 
     } 
     System.out.println("-------Lines Of COdes-------"); 
     System.out.println("number of lines:" + count); 
     System.out.println("number of blank lines:" + count2); 
     //Close the input stream 
     in.close(); 
     }catch (Exception e){//Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
     } 


} 


public static void main(String[] args) { 
new FileBrowse().setVisible(true); 

} 
} 

mais il choisit les fichiers individuels que je veux que tous les fichiers à obtenir sélectionnés dans ce dossier Test

+0

Je serais utiliser LineReader plutôt que Scanner – mKorbel

+0

@ mKorbel pourriez-vous s'il vous plaît le montrer ..! – user1464381

+0

[par exemple] (http://java2s.com/Code/Java/File-Input-Output/LineNumberReader.htm) – mKorbel

Répondre

2

Vous pouvez utiliser ce code (adapté de here):

JFileChooser chooser = new JFileChooser(); 
    chooser.setCurrentDirectory(new java.io.File(".")); 
    chooser.setDialogTitle("choosertitle"); 
    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
    chooser.setAcceptAllFileFilterUsed(false); 

    if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) 
    { 

     Map<String, Integer> result = new HashMap<String, Integer>(); 
     File directory = new File(choosers.getSelectedFile().getAbsolutePath()); //This is where you need to change. 
     File[] files = directory.listFiles(); 
     for (File file : files) 
     { 
      if (file.isFile()) 
      { 
       Scanner scanner = new Scanner(new FileReader(file)); 
       int lineCount = 0; 
       try 
       { 
        for (lineCount = 0; scanner.nextLine() != null; lineCount++) 
         ; 
       } catch (NoSuchElementException e) 
       { 
        result.put(file.getName(), lineCount); 
       } 
      } 
     } 

     for (Map.Entry<String, Integer> entry : result.entrySet()) 
     { 
      System.out.println(entry.getKey() + " ==> " + entry.getValue()); 
     } 
    } 

ce code doit remplacer cette section:

Scanner in=new Scanner(System.in); 
System.out.println("Enter the Drive name like C,D,E etc"); 
String drive=in.next(); 
System.out.println("Enter the main folder name"); 
String main_folder=in.next(); 
File directory=new File(drive+":"+"//"+main_folder+"//"); 

En outre, juste une recommandation, lorsque vous travaillez avec les consoles et les chemins d'accès système, vous devriez idéalement utiliser File.seperator. Cela vous fournira automatiquement le caractère de séparation de chemin du système respectif. Selon votre montage, dans votre cas, vous utilisez le fileChooser.getSelectedFile();. Cela ne vous obtiendra que le fichier que l'utilisateur a sélectionné, selon son nom. Ce que vous devez utiliser est le fileChooser.getSelectedFile().getAbsolutePath() et parcourir les fichiers qui sont dans ce même répertoire (comme indiqué ci-dessus).

EDIT 2: J'utilise ce code pour afficher 2 boutons avec leurs gestionnaires d'événements respectifs:

public static void main(String args[]) { 
     JFrame frame = new JFrame("Button Sample"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JButton btnExit= new JButton("EXIT");  

     ActionListener actionListenerExitButton = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent actionEvent) { 
      System.out.println("Exit Button Was Clicked"); 
      } 
     }; 
     btnExit.addActionListener(actionListenerExitButton); 

     JButton btnEnter = new JButton("ENTER"); 
     ActionListener actionListenerEnterButton = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent actionEvent) { 
       System.out.println("Enter Button Was Clicked"); 
      } 
     }; 
     btnEnter.addActionListener(actionListenerEnterButton); 

     Container contentPane = frame.getContentPane(); 
     contentPane.add(btnExit, BorderLayout.SOUTH); 
     contentPane.add(btnEnter, BorderLayout.NORTH); 
     frame.setSize(300, 100); 
     frame.setVisible(true); 
     } 

Tout ce que vous devez faire est maintenant brancher le code que j'ai fourni plus tôt dans le gestionnaire d'événements approprié .

+0

@ npinti..thanks, il est capable de sélectionner le répertoire de test mais il ne compte pas tous les fichiers, il ne compte qu'un seul fichier dans ce dossier – user1464381

+0

@ user1464381: Avez-vous utilisé le code que j'ai suggéré ou avez-vous changé le vôtre? – npinti

+0

ouais j'ai utilisé le même code que vous avez suggéré, mais il est toujours ramasser pnly fichier unique. s'il vous plaît aviser – user1464381