Point.class.getClassLoader().getResourceAsStream("com/pvminecraft/points/resources/messages.properties");
Попробуйте это без первого '/', и оно должно работать везде, где работает JVM.
Если это не сработало, попробуйте поместить файл в корень файла JAR и повторите попытку.
Если все еще не работает, попробуйте использовать этот метод:
public static byte[] getFile(File zip, String fileName) throws FileNotFoundException, ZipException, IOException {
String filename = fileName;
if (!zip.exists()) {
throw new FileNotFoundException(zip.getName());
}
while (filename.charAt(0) == '/' || filename.charAt(0) == '\\') {
filename = filename.substring(1);
}
if (filename.contains("\\")) {
filename = filename.replace("\\", "/");
}
ZipFile zipFile = new ZipFile(zip);
Enumeration entries = zipFile.entries();
ByteArrayOutputStream output;
byte[] result = null;
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
if (entry.getName().equalsIgnoreCase(filename)) {
FileUtils.copyInputStream(zipFile.getInputStream(entry), output = new ByteArrayOutputStream());
result = output.toByteArray();
zipFile.close();
output.close();
return result;
}
}
zipFile.close();
throw new FileNotFoundException(filename);
}
Вам понадобится это
public static void copyInputStream(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int len;
while (((len = in.read(buffer)) >= 0)) {
out.write(buffer, 0, len);
}
out.flush();
}
Получить путь бегущей банки
String currentJar = "";
// Get current jar path. Since user may rename this file, we need to do this way
try {
currentJar = (Points.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
if (currentJar.startsWith("/")) currentJar = currentJar.substring(1);
} catch (URISyntaxException ex) {
}
Первый '/' Я действительно не помню, почему он появляется, но он появляется, поэтому вы должны удалить его:
Наконец, вызовите метод: getFile(currentJar, "PATH_TO_PROPERTIES_FILE");
У вас будет массив байтов для работы. Просто укажите его как ByteArrayInputStream, и ваши проблемы должны быть решены.
Этот код является частью класса util, который я создал, поэтому ненужное чтение байтового массива, но, конечно, вы можете изменить его, чтобы использовать непосредственно этот InputStream для метода Properties.load ().
Ссылка для класса утилит ZIP
* ** тысячи двадцать-восемь ** тысячи двадцать-девять +1030 * -inhonmodman.svn.sourceforge.net / ViewVC / все-inhonmodman / ModManager / SRC / modmanager / утилиты / ZIP.java? Редакция = 292 & Content-Type = текст% 2Fplain * 1 032 *
Ссылка на класс утилит FileUtils
* 1 037 * -inhonmodman.svn.sourceforge.net / ViewVC / все-inhonmodman / ModManager / SRC / modmanager / утилиты / FileUtils.java? Редакция = 294 & Content-Type = текст% 2Fplain * тысяча тридцать девять *