ユーザーが特定のフォルダーを選択し、そのフォルダー内のすべてのJavaファイルと、それらのファイル内のコード行を個別にカウントしてコンソールに表示するアプリケーションを開発しましたが、Javaプロジェクトには非常に多くのパッケージがあり、現在は特定のパッケージまでナビゲートするには、ユーザーが特定のプロジェクトを選択したときに、さらにsrcフォルダーのみにナビゲートし、srcフォルダーからJavaファイルを含むすべてのパッケージのコード行がカウントされるようにアプリケーションを変更します。 。
それを達成する方法を教えてください..以下は私のコードです:
public class abc {
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new java.io.File("C:" + File.separator));
chooser.setDialogTitle("FILES ALONG WITH LINE NUMBERS");
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(chooser.getSelectedFile().getAbsolutePath());
int totalLineCount = 0;
File[] files = directory.listFiles(new FilenameFilter(){
@Override
public boolean accept(File directory, String name) {
if(name.endsWith(".java"))
return true;
else
return false;
}
}
);
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);
totalLineCount += lineCount;
}
} }
System.out.println("*****************************************");
System.out.println("FILE NAME FOLLOWED BY LOC");
System.out.println("*****************************************");
for (Map.Entry<String, Integer> entry : result.entrySet())
{ System.out.println(entry.getKey() + " ==> " + entry.getValue());
}
System.out.println("*****************************************");
System.out.println("SUM OF FILES SCANNED ==>"+"\t"+result.size());
System.out.println("SUM OF ALL THE LINES ==>"+"\t"+ totalLineCount);
}
}
}
コードの問題は、アプリケーションを起動するとダイアログボックスが開き、最終的にjavaファイルが含まれる完全なパッケージフォルダーまで参照する必要があることですが、ファイルを作成するときにアプリケーションを変更する必要があります。ダイアログボックスが開き、ユーザーはプロジェクトのsrcフォルダーにのみ移動します。それ以降は、srcフォルダー内のすべてのパッケージをスキャンし、すべてのファイルのコード行をスキャンする必要があります。アドバイスしてください。
私が考えていたのは...
- ディレクトリを表すファイルオブジェクトが与えられた場合(これをディレクトリと呼びます):
- ディレクトリ内のすべてのファイルを取得します。
- ディレクトリ内の各ファイル(これをthisFileと呼びます)に対して、次の手順を実行します。
- thisFileがディレクトリの場合は、最初からthisFileをディレクトリとして使用します。
- それ以外の場合、thisFileが.javaファイルの場合は、コードの行数を数えます
- それ以外の場合は、thisFileを無視してください
メインをメソッドに分割すると、これは非常に簡単になります。