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

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

Ответов (6)

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

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

public static String loadTextFile(File f) {
    try {
        BufferedReader r = new BufferedReader(new FileReader(f));
        StringWriter w = new StringWriter();

        try {
            String line = reader.readLine();
            while (null != line) {
                w.append(line).append("\n");
                line = r.readLine();
            }

            return w.toString();
        } finally {
            r.close();
            w.close();
        }
    } catch (Exception ex) {
        ex.printStackTrace();

        return "";
    }
}

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

  • Если в качестве ресурса, следуйте советам и примеру Уилла и Джастина.
  • Если конфигурация, то вы можете использовать ResourceBundle или Spring (если ваша конфигурация более сложная).
  • Если вам нужно прочитать файл для обработки данных внутри, этот фрагмент кода может помочь, BufferedReader file = new BufferedReader(new FileReader(filename))а затем прочитать каждую строку файла, используя file.readLine(); Не забудьте закрыть файл.

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

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

Например:

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

-

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

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

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

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

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

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

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

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

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;
} // ()