如何将文件保存到类path

我如何保存/加载位于我的课程的地方的文件? 我没有到那个位置的物理path,我想dynamic地find该文件。

谢谢

编辑:

我想加载一个XML文件,并写入和阅读,我不知道如何解决它。

在一般情况下,你不能。 从类加载器加载的资源可以是任何东西:目录中的文件,embedded到jar文件中的文件,甚至通过networking下载。

使用ClassLoader#getResource()getResourceAsStream()从类path获取它们作为URLInputStream

 ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); InputStream input = classLoader.getResourceAsStream("com/example/file.ext"); // ... 

或者,如果它与当前课程在同一个包中,则还可以按如下方式获取它:

 InputStream input = getClass().getResourceAsStream("file.ext"); // ... 

储蓄是一个故事。 如果文件位于JAR文件中,这将不起作用。 如果可以确保文件已扩展且可写,则将URLgetResource()转换为File

 URL url = classLoader.getResource("com/example/file.ext"); File file = new File(url.toURI().getPath()); // ... 

然后你可以用它构造一个FileOutputStream

相关问题:

  • getResourceAsStream()FileInputStream

如果您的类是从文件系统加载的,您可以尝试以下方法。

 String basePathOfClass = getClass() .getProtectionDomain().getCodeSource().getLocation().getFile(); 

要获取该path中的文件,您可以使用

 File file = new File(basePathOfClass, "filename.ext"); 

new File(".").getAbsolutePath() + "relative/path/to/your/files";

根据系统属性文档 ,你可以作为“java.class.path”属性来访问它:

 string classPath = System.getProperty("java.class.path"); 

这是对彼得的回应的​​扩展:

如果您希望该文件与当前类位于相同的类path中(例如:project / classes):

 URI uri = this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI(); File file = new File(new File(uri), PROPERTIES_FILE); FileOutputStream out = new FileOutputStream(createPropertiesFile(PROPERTIES_FILE)); prop.store(out, null); 

如果你想在另一个类path中的文件(例如:progect / test-classes),只需用TestClass.classreplacethis.getClass()

从Classpath读取属性:

 Properties prop = new Properties(); System.out.println("Resource: " + getClass().getClassLoader().getResource(PROPERTIES_FILE)); InputStream in = getClass().getClassLoader().getResourceAsStream(PROPERTIES_FILE); if (in != null) { try { prop.load(in); } finally { in.close(); } } 

将属性写入到Classpath中:

 Properties prop = new Properties(); prop.setProperty("Prop1", "a"); prop.setProperty("Prop2", "3"); prop.setProperty("Prop3", String.valueOf(false)); FileOutputStream out = null; try { System.out.println("Resource: " + createPropertiesFile(PROPERTIES_FILE)); out = new FileOutputStream(createPropertiesFile(PROPERTIES_FILE)); prop.store(out, null); } finally { if (out != null) out.close(); } 

在类path上创build文件对象:

 private File createPropertiesFile(String relativeFilePath) throws URISyntaxException { return new File(new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()), relativeFilePath); }