



Краткий ответ
Используйте один из этих двух методов:
Например:
InputStream inputStream = YourClass.class.getResourceAsStream("image.jpg");
-
Длинный ответ
Обычно нежелательно загружать файлы по абсолютным путям. Например, не делайте этого, если можете:
File file = new File("C:\Users\Joe\image.jpg");
Этот метод не рекомендуется по крайней мере по двум причинам. Во-первых, он создает зависимость от конкретной операционной системы, что не позволяет приложению легко перейти на другую операционную систему. Одно из основных преимуществ Java - возможность запускать один и тот же байт-код на многих разных платформах. Использование такого абсолютного пути делает код менее переносимым.
Во-вторых, в зависимости от относительного расположения файла этот метод может создать внешнюю зависимость и ограничить мобильность приложения. Если файл существует вне текущего каталога приложения, это создает внешнюю зависимость, и нужно знать о зависимости, чтобы переместить приложение на другой компьютер (подверженность ошибкам).
Вместо этого используйте методы getResource() в классе Class. Это делает приложение более портативным. Его можно перемещать на разные платформы, машины или каталоги, и при этом он по-прежнему работает правильно.
Esp. не делайте File («C: \ Users \ Joe \ image.jpg»), потому что \ U \ J и \ i - все экранирования, и вы получите сообщение об ошибке. <улыбка>
Также можно использовать так: getClass().getClassLoader().getResource("image.jpg");
Следует отметить, что если вы используете Windows NT или новее, может использует символ / в качестве разделителя. Итак, я не знаю ОС, которая имеет одновременно JRE и, например, не понимает images / splashimage.png.
getResource прекрасен, но использование относительных путей тоже будет работать, если вы можете контролировать, где находится ваш рабочий каталог (что обычно возможно).
Кроме того, зависимость от платформы относительно символа-разделителя можно обойти с помощью File.separator, File.separatorChar или System.getProperty ("file.separator").
The name of a resource is a '/'-separated path name that identifies the resource. So don't use File.separator.
У меня не было проблем с использованием разделителей путей в стиле Unix, даже в Windows (хотя рекомендуется проверять File.separatorChar).
Метод использования ClassLoader.getResource () лучше всего подходит для ресурсов только для чтения, которые будут загружаться из файлов JAR. Иногда это вы можете программно определить каталог приложения, что полезно для конфигурируемых администратором файлов или серверных приложений. (Конечно, редактируемые пользователем файлы должны храниться где-нибудь в каталоге System.getProperty ("user.home").)
На практике использование косой черты работает на любой платформе Java (и я использовал их в Windows 2000, XP, Vista, Mobile, CE, Linux, OSX, OS / 400).
Для чего вы загружаете файлы - конфигурации или данных (например, входной файл) или в качестве ресурса?
BufferedReader file = new BufferedReader(new FileReader(filename)), а затем прочитать каждую строку файла с помощью file.readLine();. Не забудьте закрыть файл.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;
} // ()
При этом используется метод available() для а) выделения и б) определения количества байтов для чтения из потока. Этого никогда не следует делать, поскольку метод не должен возвращать общее количество байтов в потоке. См. javadoc: «Никогда нельзя использовать возвращаемое значение этого метода для выделения буфера, предназначенного для хранения всех данных в этом потоке».
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 "";
}
}
Привет Фридьято. Партия Фритьят. Пожалуйста, подумайте о добавлении дополнительной информации.
Если вы используете Maven и если ваш файл содержит текст, вам нужно обратить внимание на кодировку (см. Здесь: tshikatshikaaa.blogspot.nl/2012/07/…)