我的问题是,我在src下创建了一个文件夹(名称为IconResources),在IconResources中有许多图片。目录如下:
我想列出所有图片文件的名称,并对这些图片进行处理。我找到了那个文件。list()只在IDE中工作,若我将项目导出到jar以使其成为独立的,它将无法工作。所以我搜索并发现我应该使用inputstream和outputstream。现在我发现I/o流可以很好地用于单个文件。但我想使用inputstream和outputstream读取文件夹(IconResource),然后列出该文件夹中的文件。
因此,我的问题是如何使用i/o put stream加载文件夹并迭代该文件夹以列出该文件夹中的文件名。这些东西不仅应该在IDE下工作,还应该在导出的jar下工作。我的代码如下:
private void initalizeIconFiles(File projectDirectory){
URL a = editor.getClass().getResource("/IconResources/");// Get Folder URL
List<String> iconFileNames=new ArrayList<String>();//Create a list to store file names from IconResource Folder
File iconFolder = new File(a.getFile());
Path path=Paths.get(iconFolder.getPath());
DirectoryStream<Path> stream = Files.newDirectoryStream(path) ;
for (Path entry : stream) {
if (!Files.isDirectory(entry)) {
System.out.println(entry.getFileName().toString());
iconFileNames.add(entry.getFileName().toString());// add file name in to name list
}
}
}
上述代码只能在IDE下运行,但在导出的jar中会崩溃。
我终于解决了。我采用了Boris the Spider的答案,它在IDE中运行良好,但在导出的Jar中出现故障。然后我改变
最终输入流为=加载器。getResourceAsStream(“文本”);
到
最终输入流为=加载器。getResourceAsStream(“/文本”);
然后它可以在IDE和JAR中工作。
您可以使用JARInputStream读取JAR文件的内容
这实际上是一个非常困难的问题,因为类加载器必须考虑这样一个事实,即在运行时,类路径上可能有另一个名为IconResources的文件夹。
因此,没有“官方”方法从类路径列出整个文件夹。我在下面给出的解决方案是一种黑客攻击,目前可用于URLClassLoader的实现。这可能会发生变化。
如果你想要健壮的方法,你需要使用类路径扫描仪。库形式有很多,我个人最喜欢的是反射,但是Spring有一个内置的,还有很多其他选项。
在黑客上。
通常,如果您在URLClassLoader
上getResourceAsStream
,那么它将返回该文件夹中的资源流,每行一个。URLClassLoader
是JRE使用的默认值,因此如果您不更改该行为,这种方法应该可以开箱即用。
假设我有一个具有以下类路径结构的项目:
/
text/
one.txt
two.txt
然后运行以下代码:
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
try(
final InputStream is = loader.getResourceAsStream("text");
final InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
final BufferedReader br = new BufferedReader(isr)) {
br.lines().forEach(System.out::println);
}
将打印:
one.txt
two.txt
所以,为了得到一个列表
public static List<URL> getResources(final String path) throws IOException {
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
try (
final InputStream is = loader.getResourceAsStream(path);
final InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
final BufferedReader br = new BufferedReader(isr)) {
return br.lines()
.map(l -> path + "/" + l)
.map(r -> loader.getResource(r))
.collect(toList());
}
}
现在请记住,这些URL位置是不透明的。它们不能被视为文件,因为它们可能位于中。jar,或者他们甚至可能在互联网上的某个位置。因此,要读取资源的内容,请使用URL上的适当方法:
final URL resource = ...
try(final InputStream is = resource.openStream()) {
//do stuff
}
问题内容: 我开发了一个应用程序,可以从用户选择的文件夹中读取文件。它显示每个文件中有多少行代码。我只希望Java文件显示在文件选择器(扩展名为.java的文件)中。下面是我的代码: 我也进行了编辑,但是仍然无法正常工作,请告知请告知如何仅读取扩展名为.java的文件,换句话说,请仅从文件夹中读取java文件,请告知 问题答案: 您需要一个FilenameFilter。这应该为您工作:
我一直在尝试制作可以读取与它相同目录中的csv文件的jar应用程序。然而,事实证明这很困难,因为我目前访问该文件的方法是: 它适用于在IDE中运行的程序和测试,但在从编译的jar文件运行程序时不起作用。我不知道如何让它对这两者都起作用。我真的不能理解这个路径的东西,似乎有一百万种方法可以做到这一点,其中只有一种只适用于一个特定的场景。
如何从资源文件夹的子文件夹中读取文件。 我在资源文件夹中有一些json文件,例如: 现在我想在我的课堂上读到这个 这是我正在尝试的,但是失败了。 不起作用,那么我正在尝试: 这两样东西都不工作。
它可以工作,很酷,但问题是它不能计算正常的文件,如。txt或。png...我知道它写在这个方法中,但idk如何修复它而不破坏其他一切 我可以重做这个方法吗?(此代码不是我的https://stackoverflow.com/a/33438475/13547682)
我有一个资源文件夹/包在我的项目的根,我"不"想要加载某个文件。如果我想加载某个文件,我会使用class.getResourceAsStream,我会没事的!!我实际上想做的是在资源文件夹中加载一个“文件夹”,循环该文件夹中的文件,并获得每个文件的流,并在内容中读取...假设在运行时之前没有确定文件名...那我该怎么办?有没有一种方法来获得一个文件夹中的文件列表在您的jar文件?请注意,带有资源的
问题内容: 如何通过Java读取文件夹中的所有文件? 问题答案: Java 8提供了Files.walk API。