Come posso salvare un file sul percorso della class

Come posso salvare / caricare un file che si trova dove sono le mie classi? Non ho il percorso fisico per quella posizione prima e voglio trovare dynamicmente quel file.

Grazie

Modificare:

Voglio caricare un file XML e scriverlo e leggerlo e non sono sicuro di come affrontarlo.

Nel caso generale non puoi. Le risorse caricate da un classloader possono essere qualsiasi cosa: file in directory, file incorporati in file jar o anche scaricati attraverso la rete.

Utilizzare ClassLoader#getResource() o getResourceAsStream() per ottenerli come URL o InputStream dal classpath.

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

O se è nello stesso pacchetto della class corrente, puoi anche ottenerlo come segue:

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

Salvare è una storia a parte. Questo non funzionerà se il file si trova in un file JAR. Se puoi assicurarti che il file sia espanso e scrivibile, converti l’ URL da getResource() a File .

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

È quindi ansible FileOutputStream un FileOutputStream con esso.

Domande correlate:

  • getResourceAsStream() versus FileInputStream

Puoi provare quanto segue purché la tua class sia caricata da un filesystem.

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

Per ottenere un file in quel percorso puoi usare

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

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

Questa è un’espansione sulla risposta di Pietro:

Se si desidera il file nello stesso percorso di class della class corrente (Esempio: progetto / classi):

 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); 

Se si desidera il file in un classpath differente (Esempio: progect / test-classs), basta sostituire this.getClass() con qualcosa come TestClass.class .

Leggi le proprietà da 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(); } } 

Scrivi proprietà in 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(); } 

Creare l’object File sul Classpath:

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

In base alla documentazione delle proprietà di sistema , è ansible accedervi come proprietà “java.class.path”:

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