60 Stimmen

Wie man einen relativen Pfad in Java definiert

Hier ist die Struktur meines Projekts:

here is the structure of my project

Ich muss lesen config.properties innerhalb MyClass.java . Ich habe versucht, dies mit einem relativen Pfad wie folgt zu tun:

// Code called from MyClass.java
File f1 = new File("..\\..\\..\\config.properties");  
String path = f1.getPath(); 
prop.load(new FileInputStream(path));

Dies führt zu der folgenden Fehlermeldung:

..\..\..\config.properties (The system cannot find the file specified)

Wie kann ich in Java einen relativen Pfad definieren? Ich verwende jdk 1.6 und arbeite unter Windows.

96voto

Vinay Veluri Punkte 6601

Versuchen Sie etwas wie dies

String filePath = new File("").getAbsolutePath();
filePath.concat("path to the property file");

Ihre neue Datei verweist also auf den Pfad, in dem sie erstellt wurde, in der Regel Ihr Projekt-Stammverzeichnis.

Als @cmc sagte,

    String basePath = new File("").getAbsolutePath();
    System.out.println(basePath);

    String path = new File("src/main/resources/conf.properties").getAbsolutePath();
    System.out.println(path);

Beide ergeben den gleichen Wert.

7voto

hoapham Punkte 180

Zunächst der Unterschied zwischen absolutem Pfad und relativem Pfad aquí :

Ein absoluter Pfad enthält immer das Element Root und die vollständige Verzeichnisliste, die zum Auffinden der Datei erforderlich ist.

Alternativ dazu muss ein relativer Pfad mit einem anderen Pfad kombiniert werden, um auf eine Datei zuzugreifen.

Im Konstruktor File(String pathname) sagt die Javadoc der Klasse File, dass

Ein Pfadname, ob abstrakt oder in Form einer Zeichenkette, kann entweder absolut oder relativ sein.

Wenn Sie einen relativen Pfad erhalten möchten, müssen Sie den Pfad vom aktuellen Arbeitsverzeichnis zur Datei oder zum Verzeichnis definieren. Systemeigenschaften wie die Bilder, die du gezeichnet hast:

String localDir = System.getProperty("user.dir");
File file = new File(localDir + "\\config.properties");

Darüber hinaus sollten Sie versuchen, die Verwendung von ähnlichen ".", "../", "/" und anderen ähnlichen relativen zum Dateispeicherort relativen Pfaden zu vermeiden, denn wenn Dateien verschoben werden, ist es schwieriger zu handhaben.

4voto

 File f1 = new File("..\\..\\..\\config.properties");  

dieser Pfad versucht, auf die Datei im Projektverzeichnis zuzugreifen, dann greifen Sie einfach so auf die Datei zu.

File f=new File("filename.txt");

wenn sich Ihre Datei in OtherSources/Resources

this.getClass().getClassLoader().getResource("relative path");//-> relative path from resources folder

2voto

Danon Punkte 2170

Es ist erwähnenswert, dass in einigen Fällen

File myFolder = new File("directory"); 

verweist nicht auf die Root-Elemente. Wenn Sie Ihre Anwendung zum Beispiel auf C: Antrieb ( C:\myApp.jar ) dann myFolder zeigt auf (Windows)

C:\Users\USERNAME\directory

anstelle von

C:\Directory

1voto

yahitesh Punkte 83
 public static void main(String[] args) {
        Properties prop = new Properties();
        InputStream input = null;
        try {
            File f=new File("config.properties");
            input = new FileInputStream(f.getPath());
            prop.load(input);
            System.out.println(prop.getProperty("name"));
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

Sie können auch Folgendes verwenden
Pfad path1 =FileSystems.getDefault().getPath(System.getProperty("user.home"), "downloads", "somefile.txt");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X