2014-10-17 3 views
1

Я создал простую java-программу, в которой я создаю текстовый файл и читаю данные, записанные внутри него. Проблема в том, что я не хочу жестко задавать путь к файлу, потому что после разработки приложения я создал пакет установки для своей программы, который позволяет пользователям устанавливать его там. Теперь проблема в том, что конечный пользователь может установить файл в любом месте (т. Е. Там, на диске C, D или E), и в тех случаях я получаю исключение FileNotFoundException.Удалить жесткий путь к файлу из java-программы

Мой код-- Это код, который я использую для создания и записи текста в текстовый файл.

FileWriter file = new FileWriter("E:\\TextFile.txt",true); 
    BufferedWriter writer = new BufferedWriter(file); 
    writer.write(input); 
    write.newLine(); 
    write.close(); 

Это код, который я использую для чтения текста из текстового файла.

FileReader read = new FileReader("E:\\TextFile.txt"); 
    BufferedReader data = new BufferedReader(read); 

У меня есть еще один файл, для которого я жестко закодировал путь к файлу.

System.setProperty("webdriver.chrome.driver","D:\\New Folder\\chromedriver.exe"); 

Как вы можете видеть во всем моем коде я зашиты пути ("E: \ TextFile.txt", "E: \ TextFile.txt" и "D: \ Новая папка \ chromedriver.exe") , Есть ли способ в java удалить их. Я прошел аналогичные вопросы, но не смог выяснить, как определить местоположение файла.

+1

Youjust редактирует файлы исходного кода - что вы хотите удалить? – Mark

+1

Вы просите удалить их из скомпилированного кода? Или спрашиваете, как отредактировать источник, чтобы исправить его? Вы не можете удалить ссылки из скомпилированного кода ... Вам нужно исправить его в исходном коде и перекомпилировать + пакетное приложение – user3062946

+0

@Mark Например, код содержит путь как «E: \\ TextFile.txt», , Как видите, файл находится на диске E, но когда пользователь устанавливает файл, он может установить его в D-диск. В этом случае программа выдает исключение FileNotFoundException.Поэтому я хотел найти способ, с помощью которого я могу сообщить приложению, что пользователь установил приложение в этом месте, и вы можете прочитать его оттуда. –

ответ

2

Я сделал изменения в соответствии с suggetions и он работал на меня-

// This give me the path of the application where it is installed 
String Path = new File("").getAbsolutePath(); 

Затем я добавить имя файла вместе с путем, чтобы получить файл.

// Here i am adding the name of the file to the path to read it 
FileReader read = new FileReader(Path+"\\TextFile.txt"); 

// Here i am adding the name of the file to the path to write it 
FileWriter file = new FileWriter(Path+"\\TextFile.txt",true); 
0

Вы можете сохранить местоположение файла в файле свойств, а затем прочитать местоположение файла из него в переменную во время выполнения. Установщик должен будет сохранить местоположение файла в файле свойств как часть процесса установки.

Вы также можете иметь файл, хранящийся в пути к классам приложений, и использовать относительные пути для доступа к нему.

+0

Есть ли доступная документация, чтобы я мог ее пройти. –

+0

@Shantanu Чтение из файла свойств может быть выполнено с помощью простых файлов IO-считывателей, которые вы уже используете. Я не уверен, как работает ваш пакет установщика, но на самом деле все, что вам нужно сделать, это позволить конечному пользователю выбрать место установки и сохранить это местоположение в файле. – Grice

+0

Я использую Launch4j для преобразования моего jar в формат .exe, тогда я использую Compio 5.5.5 (a) для установки EXE-файла в пакет установщика. Я выбрал неправильное приложение для выполнения этой работы? –

0

Я не думаю, что это ответ на то, что вы просите, но это решение вашей проблемы. То, что вы используете, есть абсолютный путь, то есть вы указываете весь URL-адрес файла, вместо этого вы можете использовать относительные пути, которые относятся к местоположению вашего приложения, точно так же, как у вас есть .class-файлы в JAR, вы можете есть папка для ваших файлов, и она будет всегда в том же месте относительно местоположения программы.

Таким образом, вместо этого:

FileReader read = new FileReader("E:\\TextFile.txt"); 

Вы можете иметь это:

FileReader read = new FileReader("..\MyFiles\TextFile.txt"); 

Или что-то вроде этого.

Смежные вопросы