Datei wird aus resources unter Windows nicht kopiert

Wambui

Aktives Mitglied
Hallo,

ich möchte mit der Klasse FileCreate plattformunabhängig einen Programmordner und in diesem eine Settings-Datei anlegen. Und sowohl Ordner als auch Datei sollen versteckt werden.
Code:
package com.example.calculator;

import java.io.File;
import java.io.IOException; 
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.DosFileAttributeView;
import java.nio.file.attribute.DosFileAttributes;
import java.nio.file.attribute.FileTime;
import static com.example.calculator.Constants.DIRECTORY;

public class FileCreate {
	private static String directory;
	private static String settings;
	private static Path source;
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		if (System.getProperty("os.name").indexOf("Windows") != -1) {
			directory = DIRECTORY;
			settings = "settings.cfg";
		} else {
			directory = "."+DIRECTORY;
			settings = ".settings.cfg";
		}
		
		String dir = System.getProperties().getProperty("user.home")+File.separator+directory;
		String file = System.getProperties().getProperty("user.home")+File.separator+directory+File.separator+settings;
		Path dirPath = Paths.get(dir);
		Path filePath = Paths.get(file);
		
		if (!(new File(System.getProperties().getProperty("user.home")+File.separator+directory).exists())) {
			try {
				dirPath = Files.createDirectory(dirPath);
				if (System.getProperty("os.name").indexOf("Windows") != -1) {
					Files.setAttribute(dirPath, "dos:hidden", true);
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (System.getProperty("os.name").indexOf("Windows") != -1) {
				source = Paths.get("resources\\settings.cfg");
			} else {
				source = Paths.get("resources/settings.cfg");
			}
			Path target = Paths.get(file);
			try {
				Files.copy(source, target);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (System.getProperty("os.name").indexOf("Windows") != -1) {
				try {
					Files.setAttribute(filePath, "dos:hidden", true);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		} 
	}

}

Dieses Programm funktioniert auch unter Linux und unter Windows wird nur das Verzeichnis angelegt. Probleme macht unter Windows
Code:
source = Paths.get("resources\\settings.cfg");
Die Default settings.cfg wird im resources-Ordner im Jar-File mitgeliefert.

C:\Users\wambui>java -jar DateiErzeugen.jar
java.nio.file.NoSuchFileException: resources\settings.cfg
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsFileCopy.copy(Unknown Source)
at sun.nio.fs.WindowsFileSystemProvider.copy(Unknown Source)
at java.nio.file.Files.copy(Unknown Source)
at com.example.calculator.FileCreate.main(FileCreate.java:58)

Windows findet die Datei nicht. Ich habe das bereits im Code ausprobiert und einen quotierten Backlash für Windows eingefügt.

Seht ihr etwas, was ich nicht sehe? Wie wird der Pfad "resources/settings.cfg" in Windows aufgerufen, wenn er im Jar-File liegt?

Grüße

Wambui
 
Zuletzt bearbeitet:
Okay, ich das hier leider nicht löschen, aber das kann ohne den resources-Ordner nicht klappen. Ich habe mein Eclipse-Problem mit dem Exportieren des Ordners noch nicht lösen können. Somit kann diese Datei ihn und die Inhalte nicht finden.

Das war mein Fehler.
 

Zurück
Oben