2017-04-08 4 views
0

Comment écrire ou lire tout type de fichier (pour exemple .txt fichier) dans un dossier de ressources avec le fichier config.property, mais sans utiliser le fichier de chemin d'accès absolu.Comment écrire tout type de fichier (par exemple txt) dans un dossier de ressources avec le fichier config.property, mais sans utiliser le fichier de chemin absolu en java

J'ai essayé de résoudre cela comme ci-dessous:

ClassLoader classLoader = Setting.class.getClassLoader(); 
Setting setting = new Setting(); 

try (InputStream resourceAsStream = classLoader.getResourceAsStream("config.properties")) { 
    setting.load(resourceAsStream); 
} 

String readFileName = setting.getValue("pathSource.txt"); 
String writeFileName = setting.getValue("outPutPathSourceFile.txt"); 

String s = System.getProperty("line.separator"); 

File readFile = new File("./src/main/resources" + File.separator + "pathSource.txt"); 
File writeFile = new File("./src/main/resources" + File.separator + "outPutPathSourceFile.txt"); 

Cependant, je ne veux pas en utilisant le préfixe ./src/main/resources.

+1

Donc, fondamentalement, vous voulez savoir s'il y a un mapping/un espace réservé spécial pour le répertoire de ressources? – Sheinbergon

+0

Bienvenue sur So. Vous voulez dire quelque chose comme 'System.getProperty (" user.dir ") +"/src/main/resources "'? – c0der

+0

Oui, exactement comme System.getProperty ("user.dir") + "/ src/main/resources" mais sans utiliser forcément cette chaîne "/ src/main/resources" –

Répondre

0

Les ressources (les fichiers sur le chemin de classe, éventuellement à l'intérieur d'un pot) peuvent être lues, mais ne sont pas destinées à être écrites. Vous pouvez les utiliser comme modèle pour créer une copie initiale sur le système de fichiers. - Joop Eggen

+0

Désolé pour une question stupide. Joop a 100% raison –

0

Si votre fichier est situé sous resources vous en mesure d'y accéder comme:

fichier File = new File (classLoader.getResource (fileName) .getFile());

si vous utilisez Spring vous pouvez utiliser ResourceUtils.getFile():

fichier File = ResourceUtils.getFile ("classpath: fileName")

MISE À JOUR:

Si Je comprends bien, vous voulez lire le fichier qui se trouve sous votre src/main/resources sans utilisation du chemin relatif /src/main/resources.

J'ai créé petite démo:

public class ReadResourceFile { 
    public static void main(String[] args) throws IOException { 
     String fileName = "webAutomationConfig.xml"; 
     ClassLoader classLoader = ReadResourceFile.class.getClassLoader(); 
     File file = new File(classLoader.getResource(fileName).getFile()); 

     System.out.println("File exists: " + file.exists()); 

     String content = new String(Files.readAllBytes(file.toPath())); 
     System.out.println(content); 
    } 
} 

Sortie:

File exists: true 
<?xml version="1.0" encoding="utf-8"?> 
<config> 
    <baseUrl>https://www.gmail.com</baseUrl> 
</config> 

Structure du projet:

enter image description here

+0

Non, je veux utiliser le fichier situé dans les ressources, comment je peux le faire sans cette ligne: "/ src/main/resources" pc Mais ceci -> Fichier fichier = nouveau fichier (classLoader.getResource (fileName) .getFile ()); en utilisant le fichier dans le dossier où progect commence –

+0

@ ВарданМатевосян J'ai mis à jour ma réponse. –

+0

getFile() génère une exception NullPointerException oooo –