我遵循了使用getClass.get资源(路径)
加载资源文件的方式。代码片段在这里:
String url = "Test.properties";
System.out.println("Before printing paths..");
System.out.println("Path2: "+ getClass().getResource(url).getPath());
FileInputStream inputStream = new FileInputStream(new File(getClass().getResource(url).toURI()));
i_propConfig.load(inputStream);
inputStream.close();
我已经在eclipse中用层次结构对其进行了配置(在source下有一个名为SwingDemo的文件夹。在SwingDemo中有我的java文件和资源文件)。。。
当我在eclipse上运行它时,一切都运行正常。但是一旦我尝试从cmd行运行应用程序,就会发生空指针异常。
命令行部署层次结构如下:
文件夹:D:\Work\Java Progrms\SwingDemo
等级制度:
SwingDemo
- 自定义对话框。爪哇语
- 测试。属性
首先,我从命令行(javacCustomDialog.java
)在SwingDemo
文件夹中编译了这个文件。然后我返回到Java程序文件夹(正如我在.Java类中提到的包),并使用著名的
java SwingDemo.CustomDialog
我以前使用新的FileInputStream(“path”)时也遵循类似的步骤。这样做之后,我得到了空指针异常。。
我认为getClass()。getResource(url)
无法从特定目录加载文件。这就是为什么我将资源放在与java文件相同的目录中。它在Eclipse中运行良好。但当我从命令行运行时,为什么会出现错误呢。
从jar内的资源文件夹访问文件的最佳方法是通过getResourceAsStream使用InputStream。如果仍需要将资源作为文件实例,则可以将资源作为流复制到临时文件中(当JVM退出时,临时文件将被删除):
public static File getResourceAsFile(String resourcePath) {
try {
InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(resourcePath);
if (in == null) {
return null;
}
File tempFile = File.createTempFile(String.valueOf(in.hashCode()), ".tmp");
tempFile.deleteOnExit();
try (FileOutputStream out = new FileOutputStream(tempFile)) {
//copy stream
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
return tempFile;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
getClass(). getResources()
使用类加载器来加载资源。这意味着资源必须在要加载的类路径中。
使用Eclipse时,您放在源文件夹中的所有内容都由Eclipse“编译”:
当使用Eclipse启动程序时,bin目录因此位于类路径中,因为它包含测试。属性文件,该文件可以由类加载器使用getResource()或
getResourceAsStream()加载。
如果不能从命令行运行,那么这是因为文件不在类路径中。
请注意,您不应该这样做
FileInputStream inputStream = new FileInputStream(new File(getClass().getResource(url).toURI()));
加载资源。因为只有从文件系统加载文件时才能工作。如果您将应用程序打包到jar文件中,或者通过网络加载类,它将不起作用。要获取InputStream,只需使用
getClass().getResourceAsStream("Test.properties")
最后,正如文件所示,
Foo.class.getResourceAsStream("Test.properties")
将加载与Foo类位于同一包中的Test.properties文件。
Foo.class.getResourceAsStream("/com/foo/bar/Test.properties")
将加载位于包
com.foo.bar
中的Test.properties文件。
我正在尝试将我的angular2应用程序从已弃用的路由器切换到推荐的路由器[https://angular.io/docs/ts/latest/guide/router.html][1]。我正在使用angular2 cli帮助构建我的项目。我已经在没有cli的种子项目中成功地完成了这一点,但是在使用cli执行此操作时,我一直收到此错误: 加载错误http://localhost:4200/app.
我有AngularJs ui路由器在我的应用程序。我需要加载js文件基于我的状态。 当主控状态加载时,headerController、homeController和footerController具有不同的js文件。我们需要加载控制器js文件。是否可以通过UI路由器?
背景:我正在写一个游戏(作为一个可执行的罐子),我的游戏的一部分是一个偏好对话框,你可以在其中设置对手的名字和影响游戏进展的不同变量。我决定这将是很好的,如果这些被保存在退出,所以下一次你加载的应用程序,它会记得你之前设置了什么。 为此,我将变量写入jar中的一个txt文件,然后在启动新游戏时读取该文件。通过eclipse,这一切都可以正常工作,但当我导出到jar时,它根本不起作用。这是我用来读取
我正在尝试加载我的 *.fxml 文件,这些文件位于不同的包中,打包在 JAR 中。 我的文件夹结构:(所有文件夹都在类路径中) 正如这里提到的,我使用以下语句来加载FXML文件。(没有前导斜杠“/”)该方法在文件中调用。 如果我在eclipse中运行这个项目,这工作得很好,但是如果我执行JAR(它是用Gradle创建的),就会出现< code > Java . lang . illegalsta
主要内容:加载现有的PDF文档,第1步:加载现有的PDF文档,示例在前面的例子中,已经学习了如何创建一个新文档并向其中添加页面。 本章将教您如何加载系统中已经存在的PDF文档,并对其进行一些操作。 加载现有的PDF文档 类的方法用于加载现有的PDF文档。 按照以下步骤加载现有的PDF文档。 第1步:加载现有的PDF文档 使用类的静态方法加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态方法,可以直接使用类名称调用它,如下所示。 第2步:执行
当打包构建应用时,Javascript 包会变得非常大,影响页面加载速度。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。 结合 Vue 的异步组件和 Webpack 的代码分割功能,轻松实现路由组件的懒加载。如: const Foo = () => import('./Foo.vue') 当你觉得你的页面热更新速度慢的时候,才需要往下看