Java kann Dateipfad nicht öffnen

Diskutiere Java kann Dateipfad nicht öffnen im Allgemeine Java-Themen Forum; Sehr geehrtes Forum, ich habe folgendes Problem: Mein Programm benötigt Zugriff (ganz normal mit BufferedReader) auf eine Datei die in einem...

  1. Developer_X
    Developer_X Aktives Mitglied
    Sehr geehrtes Forum,
    ich habe folgendes Problem:
    Mein Programm benötigt Zugriff (ganz normal mit BufferedReader) auf eine
    Datei die in einem Unterordner resources liegt, mit dem Namen "language.dat".

    Also öffne ich die Datei zum Lesen
    Code (Java):
    File f = new File("resources/language.dat");
    BufferedReader br = new BufferedReader(new FileReader(f));
    //...
    Auf meinem PC funktioniert das Programm auch, auch wenn ich es exportiere
    als Jar und irgendwo auf der Festplatte gemeinsam mit Resourcen Ordner ablege.

    Wenn ich nun mein Programm mit den Resourcen an einen Freund sende,
    dann bekommt er die Fehlermeldung, dass das Programm auf folgende Datei zugreifen will,
    die ja dann natürlich nicht existiert :
    resourceslanguage.dat

    Das Programm lässt auf seinem PC einfach die "/" weg.
    Also habe ich recherchiert und herausgefunden, man sollte, um Programme
    plattformunabhängig laufen zu lassen, statt "/" lieber "System.getProperty("file.separator")"
    verwenden.
    Code (Java):
    File f = new File("resources"+System.getProperty("file.separator")+"language.dat");
    BufferedReader br = new BufferedReader(new FileReader(f));
    //...
    Den Code habe ich daraufhin angepasst, aber das Programm macht weiterhin
    denselben Fehler auf seinem PC.

    Was kann ich tun, damit das Programm auch dort fehlerfrei funktioniert?
    Danke sehr für eure Antwort,
    m.f.G.: Developer_X
     
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. Developer_X
    Developer_X Aktives Mitglied
    Und das verrückteste an allem, wir benutzen beide dasgleiche
    Betriebssystem, Windows 7 64 Bit.

    Das Problem habe ich aber auch schon bei anderen Freuenden erlebt.
     
  4. KeVoZ_
    KeVoZ_ Mitglied
    Und die Java Version?

    EDIT: Wo liegt die Datei denn?
     
  5. Robat
    Robat Aktives Mitglied
    Sobald du dein Programm in eine Jar umwandelst ist dein File ein classPathResource.
    D.h. du musst entweder:
    Code (Java):

    this.getClass().getResourceAsStream("PATH/TO/THE/FILE");
     
    oder (falls deine Methode static ist):
    Code (Java):

    className.class.getResourceAsStream("PATH/TO/THE/FILE");
     
    nehmen :)

    Gruß
    Robert
     
    Zuletzt bearbeitet: 24. Nov. 2016
    VfL_Freak gefällt das.
  6. Developer_X
    Developer_X Aktives Mitglied
    Aber die Datei und der Ordner sind extern von der Jar,
    nicht in der Jar drin. Dann muss man doch nicht getResourceAsStream
    verwenden oder nicht?
    Mein Java Programm liegt als Jar in einem Ordner,
    und dazu liegt noch den Order mit den Dateien imselben Verzeichnis.

    Und ohne etwas zu tun funktioniert es an einigen PCs (das habe ich getestet, mit 30 Personen),
    und bei anderen wiederum nicht.

    Java Version bei meinem Freund: Java 8 / 111
     
  7. dennisbauer
    dennisbauer Mitglied
    am einfachsten ist, wenn du, so wie du sagst, die externe Datei außerhalb des Classpath auch als File aufrufst. Ein FileInputStream ginge natürlich auch. Das Problem, dass ich das aktuelle Verzeichnis nicht adressieren konnte hatte ich auch bereits.

    Um das aktuelle Verzeichnis, in dem die JAR ausgeführt wird, herauszufinden, kannst du einfach mithilfe von
    Code (Text):
    System.getProperty("user.dir");
    das aktuelle Verzeichnis ausgeben lassen. Dahinter folgen dann ganz normal deine Dateipfade. Den Seperator kann ich dir anmerken, mit der statischen Variable File.separator geht es einfacher ;)
     
  8. Developer_X
    Developer_X Aktives Mitglied
    Also jetzt kriege ich nur noch Fehlermeldungen...
    Code (Java):
    package main;

    import java.awt.BorderLayout;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.InputStream;
    import java.io.InputStreamReader;

    import javax.swing.JFrame;
    import javax.swing.JTextArea;

    public class Test
    {
        public static void main(String[]args)
        {      
            JFrame f = new JFrame("Java Datei Lesen Test");
         
            f.setSize(400,600);
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
            f.setLayout(new BorderLayout());
            JTextArea jta = new JTextArea();
            f.add(jta,"Center");
         
            f.setVisible(true);
         
            jta.setText("Aktuelles Verzeichnis : "+System.getProperty("user.dir")+"\n"
                       +"Versuche Datei \""+"folder"+File.separator+"File.txt"+"\" zu öffnen...\n");
         
            try
            {
                InputStream is = Test.class.getResourceAsStream("folder"+File.separator+"File.txt");
             
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String line = br.readLine();
                br.close();

                jta.setText(jta.getText()+"Zugriff erfolgreich :)...\nInhalt : "+line);
            }
            catch(Exception e)
            {
                e.printStackTrace();
                jta.setText(jta.getText()+"Hat nicht geklappt...");
            }  
        }
    }
     
    Code (Text):
    java.lang.NullPointerException
        at java.io.Reader.<init>(Unknown Source)
        at java.io.InputStreamReader.<init>(Unknown Source)
        at main.Test.main(Test.java:35)
     
    (Es gibt einen Ordner namens "folder", in dem eine Datei "file.txt" liegt.)
     
  9. dennisbauer
    dennisbauer Mitglied
    Deine Lösung kann aber nur dann funktionieren, wenn dieser ORdner "folder" auch in deinem Classpath also in deiner Jar-Datei drin ist bzw. im Workspace eben unter src/main/resources , ansonsten wird das nicht gehen
     
  10. InfectedBytes
    InfectedBytes Bekanntes Mitglied
    Das kommt auf die IDE an.
     
  11. JStein52
    JStein52 Bekanntes Mitglied
    ich denke gerade verschlimmbesserst du das Ganze. Es geht doch nur darum warum er auf einigen PC's den Separator nicht richtig expandiert !
     
  12. Developer_X
    Developer_X Aktives Mitglied
    JA genauso sehe ich das auch.
    Ich habe doch gesagt, dass der Ordner und die Datei außerhalb
    der JAR liegen.

    Wie kann ich sichergehen, dass der Separator richtig eingestellt wird?
     
  13. mrBrown
    mrBrown Bekanntes Mitglied
    Indem du / nutzt, die JVM kümmert sich drum.
     
  14. Developer_X
    Developer_X Aktives Mitglied
    Hast du überhaupt meine Frage / den ersten Post im Thread gelesen?
     
  15. Robat
    Robat Aktives Mitglied
    Hast du den resources Folder denn auch zu deinem Classpath hinzugefügt?
    Oder ist der Order garnicht in das Projekt involviert sondern liegt einfach nur irgendwo auf dem PC rum?

    Du musst aber auch sicher stellen, dass die Dateien auf den beiden Rechnern am gleichen Ort liegen. Wenn sie bei dir Unter C:/Users/home/resources/.. und bei deinem Freund unter D:/Files/Foo/Bar/resources/.. liegt dann ist klar dass dein Programm den Ordner nicht findet.
    Damit du einen einheitlichen Path hast würde ich dir empfehlen deinen Path mit System.getProperty("user.dir"); zuerstellen, so wie @dennisbauer es schon gesagt hatte.
     
  16. JStein52
    JStein52 Bekanntes Mitglied
    Aber Jungs, das Problem war doch nicht dass die Datei in einem anderen Pfad war sondern dass der Pfad keine Separator's enthielt !
     
  17. mrBrown
    mrBrown Bekanntes Mitglied
    Ja, das hat aber (vermutlich) nichts mit dem korrektem Seperator zu tun, die Versuche mit File.seperator und SystemProperty machen's nur noch schlimmer.

    Lass dir testweise mal mit file.getAbsolutePath() den Dateipfad, den du versuchst zu öffnen, ausgeben
     
    JStein52 gefällt das.
  18. JStein52
    JStein52 Bekanntes Mitglied
    Auf dem PC deines Freundes
     
  19. Neumi5694
    Neumi5694 Mitglied
    Was den Separator angeht ... bleib bei "/". Das funktoniert sowohl unter Windows als auch Unix, Java nimmt notwendige Konvertierungen selbst vor.
    Lass auch mal System.getProperty("file.separator") ausgeben. Was du ganz oben und auch schon im zweiten Versuch schon gepostet hast, ist zwar nicht die eleganteste aller Lösungen, sollte aber funktionieren.

    Es mag etwas unwahrscheinlich klingen, aber ich denke, Java kennt den Separator nicht, da er sowohl fehlt, wenn du "/" verwendest als auch dann, wenn du den Pfad manuell mit eben jener Variable erstellen lässt.
    Möglicherweise ist bei deinem Freund die Java-Installation im A...
     
  20. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)
Die Seite wird geladen...

Java kann Dateipfad nicht öffnen - Ähnliche Themen

Was kann java?
Was kann java? im Forum Allgemeine Java-Themen
Kann man erzwingen, dass Java 'zu Ende zeichnet'..?
Kann man erzwingen, dass Java 'zu Ende zeichnet'..? im Forum AWT, Swing, JavaFX & SWT
Kann ich Java - Programme auch ohne Editor öffnen?
Kann ich Java - Programme auch ohne Editor öffnen? im Forum Java Basics - Anfänger-Themen
Suche jemanden der kleine kurze JavaScripte schreiben kann
Suche jemanden der kleine kurze JavaScripte schreiben kann im Forum Private Stellangebote und Stellensuche von Usern
wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben?
wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? im Forum Netzwerkprogrammierung
Thema: Java kann Dateipfad nicht öffnen