FileInputStream fstream = new FileInputStream("abc.txt")
выдает FileNotFoundExceptionn во время работы в качестве jar. Почему ? Обычно он может найти во время работы из основного метода.
FileInputStream fstream = new FileInputStream("abc.txt")
выдает FileNotFoundExceptionn во время работы в качестве jar. Почему ? Обычно он может найти во время работы из основного метода.
Если ваш файл упакован с вашей банкой, вы должны получить информацию, используя getClass().getResource(url)
:
FileInputStream inputStream =
new FileInputStream(new File(getClass().getResource(/path/to/your/file/abc.txt).toURI()));
В противном случае вам нужно всегда создавать его на том же пути, что и ваша банка, и вы можете получить его так же, как и вы:
src/myJar.jar
src/folder/abc.txt
FileInputStream fstream = new FileInputStream("folder/abc.txt");
Вы также можете прочитать здесь:
Как загрузить файл из папки ресурсов? и Загрузка файла с помощью getClass().getResource()
project\dist\jarfile.jar
, надеюсь, вы поняли мою точку зрения @subhajit
- person YCF_L; 20.01.2017
class MyClass{
InputStream fstream = this.getClass().getResourceAsStream("abc.txt");
}
Этот код следует использовать. И файлы (в данном случае abc.txt) должны храниться в расположении класса ссылок на объекты. Это означает, что this.getClass относится к расположению некоторой папки, т. е. папки com/myfolder/MyClass.java.
Поэтому мы должны хранить abc.txt в папке com/myfolder в этом месте.
Вы можете использовать FileInputStream
только тогда, когда у вас действительно есть файл в файловой системе компьютера. Когда вы упаковываете свой текстовый файл в файл jar для своей программы, это не файл в файловой системе. Это запись внутри файла jar.
Хорошая новость заключается в том, что в Java еще проще получить доступ к файлу таким образом: он находится в вашем пути к классам, поэтому вы можете использовать getResourceAsStream()
.
InputStream stream = getClass().getResourceAsStream("abc.txt");
Если у вас правильно настроен путь к классам, это будет работать независимо от того, является ли это файлом в каталоге (например, во время разработки) или записью в файле jar (например, при выпуске).
Это потому, что ваш рабочий каталог, вероятно, будет отличаться в двух средах. Попробуйте добавить строку
System.out.println(new File("abc.txt").getAbsolutePath());
чтобы увидеть, где он на самом деле ищет файл.
Может быть, не самый элегантный, но именно так вы можете охватить все параметры в Scala
def loadFile(path: String) = {
val f = new File(path)
if (f.exists) {
loadFileFromPath(path)
} else {
val r = Try {
val in = ClassLoader.getSystemResourceAsStream(path)
new InputStreamReader(in)
}.getOrElse{
val in = getClass.getResourceAsStream(s"/$path")
new InputStreamReader(in)
}
loadFileFromInputStream(r)
}
}