0

以下に示すファイルの行数をカウントするプログラムを開発しました

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

しかし、私はスイングインターフェースJFilechooserを追加しようとしていました。ユーザーが特定のフォルダーとそのフォルダー内のすべてのファイルを選択して選択し、コードがそのまま機能するので上に置いておく必要があります。アドバイスしてください。

上記のコードを統合できるように、jfileチューザーの設計についてアドバイスしてください。

もう1つのソリューションを設計しました

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

}
}

しかし、それは私が望む個々のファイルを選択し、そのフォルダ内ですべてのファイルが選択されるようにしますテスト

4

1 に答える 1

2

このコードを使用できます(ここから採用):

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

このコードは、このセクションを置き換える必要があります。

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+"//");

また、コンソールとシステムパスを操作するときは、理想的にはを使用することをお勧めしますFile.seperator。これにより、それぞれのシステムのパス分離特性が自動的に提供されます。

あなたの編集によると、あなたの場合、あなたはを使用していfileChooser.getSelectedFile();ます。これにより、名前に従って、ユーザーが選択したファイルのみが取得されます。使用する必要があるのはfileChooser.getSelectedFile().getAbsolutePath()、同じディレクトリ内にあるファイルを繰り返し処理することです(上記のように)。

編集2:このコードを使用して、それぞれのイベントハンドラーを含む2つのボタンを表示します。

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

ここで行う必要があるのは、前に提供したコードを適切なイベントハンドラーにプラグインすることだけです。

于 2012-06-28T06:18:14.593 に答える