我有点卡在我正在处理的项目中,我想从另一个文件夹中加载文本文件.我正在使用Netbeans,并且出于这个问题的目的,有两个文件夹,一个是我的班级,另一个是资源.
该类在../misc/[ClassName],我想要加载的文本文件../resources/[Name].txt
这听起来简单得令人难以置信,并且已经完成了Java很长一段时间我真的应该知道这一点,我假设加载这个文件而不是仅使用FileReader的最好方法就是使用getResourceAsStream,如图所示:
InputStream is =
this.getClass().getClassLoader().getResourceAsStream(_filename + ".txt");
Run Code Online (Sandbox Code Playgroud)
理想情况下节省我的时间,而不必在文件路径中进行硬编码.现在,我的问题是我不断从上面的代码返回null,实际上我可以放在它上面的任何其他排列.我已经尝试过/resource/filename.txt或resource/filename.txt作为参数,使用.getClass().getResourceAsStream相反getClassLoader(),一切仍然返回相同的结果.
为了避免任何混淆,我已经检查了文件名及其绝对正确和正确的情况等,所以这不是问题.有任何想法吗?我知道我可以FileReader用来实现同样的目标,但现在它是一种原则!
Bal*_*usC 13
该类显然由不同的类加载器加载,该类加载器根本不了解该资源.而是使用ClassLoader从当前获得的上下文Thread.它知道一切.
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(_filename + ".txt");
Run Code Online (Sandbox Code Playgroud)
我使用IntelliJ并且发现一个常见的"问题"是忘记定义适当的资源模式以包含.txt文件,.css文件等.这意味着当构建过程运行时它将从jar文件中排除这些文件它创建,导致调用getResource()返回null.
我怀疑你的Netbeans环境可能会发生类似的事情,所以可能值得一试.
小智 5
我遇到了和David Meadows一样的问题,
它自2008年开始运作并没有问题.阅读有关getResourceAsStream( )此处的所有帖子.我的问题是我可以从jar文件中读取一些文件.可以读取所有png文件,但不能读取wav文件.奇怪的是,如果我将.wav文件重命名为.png.这些文件可以加载和播放!
当我部署它运行的应用程序时,它可能是IntelliJ吗?
注意:我知道.wav文件是可以通过JarFile和JarEntry实现的.
intelliJ中的解决方案:在项目设置中,将包含资源文件的文件夹(在我的案例中为声音文件)添加为源.加
?*.wav(或你的pref文件类型)
在设置 - >编译器资源模式中.
你的类路径从哪里开始?是从misc或开始..吗?
您可以发布 的值this.getClass().getName()吗?
如果返回,misc.ClassName您必须使用this.getClass().getResourceAsStream("/resources/filename.txt").
| 归档时间: |
|
| 查看次数: |
16208 次 |
| 最近记录: |