Как мне загрузить файлы в мое Java-приложение? - PullRequest
66 голосов
/ 09 августа 2008

Как загрузить файлы в приложение Java?

Ответы [ 5 ]

55 голосов
/ 09 августа 2008

Краткий ответ

Используйте один из этих двух методов:

Например:

InputStream inputStream = YourClass.class.getResourceAsStream("image.jpg");

-

Длинный ответ

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

File file = new File("C:\\Users\\Joe\\image.jpg");

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

Во-вторых, в зависимости от относительного расположения файла этот метод может создать внешнюю зависимость и ограничить мобильность приложения. Если файл существует за пределами текущего каталога приложения, это создает внешнюю зависимость, и необходимо будет знать о зависимости, чтобы переместить приложение на другой компьютер (подверженный ошибкам).

Вместо этого используйте методы getResource() в классе Class. Это делает приложение намного более портативным. Его можно перемещать на разные платформы, машины или в каталоги и по-прежнему функционировать правильно.

9 голосов
/ 09 августа 2008

getResource - это хорошо, но использование относительных путей также будет работать, если вы можете контролировать, где находится ваш рабочий каталог (что вы обычно можете).

Кроме того, зависимость платформы от символа разделителя можно обойти, используя File.separator , File.separatorChar или System.getProperty ("file.separator") .

7 голосов
/ 27 августа 2008

Для чего вы загружаете файлы - конфигурацию или данные (например, входной файл) или как ресурс?

  • Если в качестве ресурса, следуйте предложению и примеру, данному Will and Justin
  • Если конфигурация, то вы можете использовать ResourceBundle или Spring (если ваша конфигурация более сложная).
  • Если вам нужно прочитать файл для обработки данных внутри, этот фрагмент кода может помочь BufferedReader file = new BufferedReader(new FileReader(filename)), а затем прочитать каждую строку файла, используя file.readLine(); Не забудьте закрыть файл.
2 голосов
/ 20 февраля 2011
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;
} // ()
2 голосов
/ 09 августа 2008

У меня не было проблем с использованием разделителей путей в стиле Unix даже в Windows (хотя рекомендуется проверять File.separatorChar ).

Техника использования ClassLoader.getResource () лучше всего подходит для ресурсов только для чтения, которые будут загружаться из файлов JAR. Иногда можно программно определить каталог приложения , который полезен для настраиваемых администратором файлов или серверных приложений. (Конечно, редактируемые пользователем файлы должны храниться где-то в каталоге System.getProperty ("user.home") .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...