Как загрузить файлы в мое приложение Java?
Как загрузить файлы в приложение Java?
Ответ 1
Короткий ответ
Используйте один из этих двух способов:
Например:
InputStream inputStream = YourClass.class.getResourceAsStream("image.jpg");
-
Длинный ответ
Как правило, не нужно загружать файлы с использованием абсолютных путей. Например, не делайте этого, если вы можете ему помочь:
File file = new File("C:\\Users\\Joe\\image.jpg");
Этот метод не рекомендуется по крайней мере по двум причинам. Во-первых, он создает зависимость от конкретной операционной системы, которая не позволяет приложению легко перемещаться в другую операционную систему. Одним из основных преимуществ Javas является возможность запуска одного и того же байт-кода на разных платформах. Использование абсолютного пути, как это делает код гораздо менее портативным.
Во-вторых, в зависимости от относительного расположения файла этот метод может создать внешнюю зависимость и ограничить мобильность приложений. Если файл существует за пределами текущего каталога приложений, это создает внешнюю зависимость, и вам нужно будет знать зависимость, чтобы переместить приложение на другую машину (с ошибкой).
Вместо этого используйте методы getResource()
в классе Class
. Это делает приложение более переносимым. Его можно перемещать на разные платформы, машины или каталоги и все еще правильно работать.
Ответ 2
getResource в порядке, но использование относительных путей будет работать так же хорошо, если вы можете контролировать, где находится ваш рабочий каталог (который вы обычно можете).
Кроме того, зависимость платформы от символа разделителя может быть получена с помощью File.separator, File.separatorChar или System.getProperty( "file.separator" ).
Ответ 3
Что вы загружаете файлы для - конфигурации или данных (например, входного файла) или в качестве ресурса?
- Если в качестве ресурса следуйте рекомендациям и примерам, приведенным Will and Justin
- В случае конфигурации вы можете использовать ResourceBundle или Spring (если ваша конфигурация более сложна).
- Если вам нужно прочитать файл, чтобы обрабатывать данные внутри, этот фрагмент кода может помочь
BufferedReader file = new BufferedReader(new FileReader(filename))
, а затем прочитать каждую строку файла с помощьюfile.readLine();
Не забудьте закрыть файл.
Ответ 4
У меня не было проблемы с использованием разделителей путей в стиле unix даже в Windows (хотя рекомендуется проверять File.separatorChar).
Техника использования ClassLoader.getResource() лучше всего подходит для ресурсов только для чтения, которые будут загружаться из файлов JAR. Иногда вы можете программно определить каталог приложения, который полезен для файлов, настраиваемых администратором или серверных приложений. (Конечно, редактируемые пользователем файлы должны храниться где-то в каталоге System.getProperty( "user.home" ).
Ответ 5
public byte[] loadBinaryFile (String name) {
try {
DataInputStream dis = new DataInputStream(new FileInputStream(name));
byte[] theBytes = new byte[dis.available()];
dis.read(theBytes, 0, dis.available());
dis.close();
return theBytes;
} catch (IOException ex) {
}
return null;
} // ()