вопрос плохо задан, а текст вводит в заблуждение. «У меня есть относительный путь к каталогу (каталог и файлы в нем являются частью сборки)» означает мало и ничего, вам нужно уточнить, что вы имеете в виду.
Предполагая, что вы получите относительный каталог (например, «) / folder1 / folder2 ") через параметр командной строки, у вас в основном есть 3 варианта:
1) запустить программу с каталогом, в котором находится jar, как« текущий каталог », чтобы его можно было использовать в качестве рабочего каталога. Этот подход требует, чтобы при запуске приложения с помощью команды java -jar myapp.jar сначала вы добавляли команду «cd», чтобы поместить себя непосредственно в каталог. Код будет выглядеть как решение @ hamidreza75, но, очевидно, у вас будет не переменная «D: / Programming», а непосредственно относительный путь к каталогу, в который нужно читать файлы.
сценарий запуска
@echo off
cd {jar-folder}
java -jar myapp.jar
java код:
package com.sample.stack;
import java.io.File;
import java.io.FilenameFilter;
public class FileRenamenter {
public static void main(String[] args) {
final String relativePath = "folder1/folder2";
File directory = new File(relativePath);
String[] list = directory.list(new FilenameFilter(){
public boolean accept(File dir, String name) {
// filter condition
return true;
}
});
// echo file list
for (String filePath : list) {
System.out.println(filePath);
}
}
}
2) передать управляемую папку через параметр командной строки, например:
сценарий запуска
@echo off
java -jar {jar-folder}/myapp.jar {jar-folder}
java код (изменяется только переменная "directory")
File directory = new File(args[0], relativePath); // note args[0]
3) программно найти папку, в которой выполняется jar [очень не рекомендуется), а затем объединить относительный путь:
java код (изменяется только переменная "directory"):
String jarFolder = ClassLoader.getSystemClassLoader().getResource(".").getPath();
File directory = new File(jarFolder, relativePath); // note jarFolder