Изменение текущего рабочего каталога в Java? - PullRequest
158 голосов
/ 08 мая 2009

Как я могу изменить текущий рабочий каталог из программы Java? Все, что я смог найти в этой проблеме, утверждает, что вы просто не можете этого сделать, но я не могу поверить, что это действительно так.

У меня есть фрагмент кода, который открывает файл с использованием жестко заданного относительного пути к файлу из каталога, в котором он обычно запускается, и я просто хочу иметь возможность использовать этот код из другой Java-программы без необходимости запуска это из определенного каталога. Похоже, что вы просто должны быть в состоянии вызвать System.setProperty( "user.dir", "/path/to/dir" ), но, насколько я могу понять, вызов этой линии просто молча завершается ошибкой и ничего не делает.

Я бы понял, если бы Java не позволяла вам сделать это, если бы не тот факт, что он позволяет получить текущий рабочий каталог и даже позволяет открывать файлы, используя относительные пути к файлам ....

Ответы [ 13 ]

0 голосов
/ 11 сентября 2013

Использовать FileSystemView

private FileSystemView fileSystemView;
fileSystemView = FileSystemView.getFileSystemView();
currentDirectory = new File(".");
//listing currentDirectory
File[] filesAndDirs = fileSystemView.getFiles(currentDirectory, false);
fileList = new ArrayList<File>();
dirList = new ArrayList<File>();
for (File file : filesAndDirs) {
if (file.isDirectory())
    dirList.add(file);
else
    fileList.add(file);
}
Collections.sort(dirList);
if (!fileSystemView.isFileSystemRoot(currentDirectory))
    dirList.add(0, new File(".."));
Collections.sort(fileList);
//change
currentDirectory = fileSystemView.getParentDirectory(currentDirectory);
0 голосов
/ 31 июля 2012

Если вы запускаете свои команды в оболочке, вы можете написать что-то вроде «java -cp» и добавить любые каталоги, которые хотите разделить на «:», если java не находит что-то в одном каталоге, он попытается найти их в другом. каталоги, это то, что я делаю.

0 голосов
/ 08 мая 2009

Другой возможный ответ на этот вопрос может зависеть от причины, по которой вы открываете файл. Это файл свойств или файл, имеющий некоторую конфигурацию, связанную с вашим приложением?

В этом случае вы можете попытаться загрузить файл через загрузчик classpath, таким образом вы можете загрузить любой файл, к которому имеет доступ Java.

...