JAR 内のフォルダー内のファイル数をカウントする方法を見つけるのに少し時間を費やしました。これを機能させるために、さまざまな目的に役立つコードの例をいくつかまとめました。Eclipse でコードを実行すると問題なくカウントされますが、JAR にエクスポートすると失敗して 0 が返されます。この場合、使用するフォルダー パスは「rules/」です。推奨事項やサンプルをいただければ幸いです。ありがとう。
public static int countFiles(String folderPath) throws IOException { //Counts the number of files in a specified folder
ClassLoader loader = ToolSet.class.getClassLoader();
InputStream is = loader.getResourceAsStream(folderPath);
try {
byte[] c = new byte[1024];
int count = 0;
int readChars = 0;
boolean empty = true;
while ((readChars = is.read(c)) != -1) {
empty = false;
for (int i = 0; i < readChars; ++i) {
if (c[i] == '\n') {
++count;
}
}
}
return (count == 0 && !empty) ? 1 : count;
} finally {
is.close();
}
}
編集: 以下は元の質問と完全には一致しませんが、MadProgrammer のおかげで、コードを削減し、ファイルを数える必要さえなくすことができました。コードブローは、JAR 内のすべてのファイルを検索して「.rules」で終わるファイルを探し、ファイルを開き、「searchBox.getText()」に一致する文字列をファイルで検索し、結果を追加して、次の「 .rules」ファイル。
StringBuilder results = new StringBuilder();
int count = 0;
JarFile jf = null;
try {
String path = ToolSet.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String decodedPath = URLDecoder.decode(path, "UTF-8");
jf = new JarFile(new File(decodedPath));
Enumeration<JarEntry> entries = jf.entries();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
if (entry.getName().endsWith(".rules")) {
String name = entry.getName();
InputStream in = ToolSet.class.getResourceAsStream(name);
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bf = new BufferedReader(isr);
String line;
while ((line = bf.readLine()) != null) {
String lowerText = line.toLowerCase();
if(lowerText.indexOf(searchBox.getText().toLowerCase()) > 0) {
results.append(line + "\n");
count++;
}
}
bf.close();
}
}
} catch (IOException ex) {
try {
jf.close();
} catch (Exception e2) {
}
}
if(count>0) {
logBox.setText(results.toString());
} else {
logBox.setText("No matches could be found");
}