FileNotFoundException obwohl der Pfad und der Filename korrekt sind

m0$tw4nt3d

Mitglied
Hi ich habe folgendes problem ich möchte einen pickle file einlesen mit Hilfe von Java (habe die Nötigen Klassen um das verwenden zu können importiert) um die Datei jetzt verwerten zu können muss ich einen InputStream erzeugen. Ich dachte ich nutze ienfach einen FileInputStream, aber der sagt die ganze Zeit die Datei existiert nicht, obwohl ich ja sehen kann das sie existiert. Kann das eventuell an der pickle Endung liegen?

Hier der Code:
Java:
        Unpickler unpickler = new Unpickler();
        try {

            InputStream stream = new FileInputStream("com/example/signlanguageinterpreter/model.p");
            model_dict = (Map) unpickler.load(new FileInputStream("/home/AndroidStudioProjects/SignLanguageInterpreter/app/src/main/java/com/example/signlanguageinterpreter/model.p"));
            System.out.println(model_dict);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

Die Klasse Unpickler braucht eben diesen InputStream und ich weiß nicht wie ich den anders bekomen kann.
Hier der Link zu dem Github wo ich den Code fürs unpicklen her habe:
githubrepo

Vielen Dank schonmal für alle Ideen
 

KonradN

Super-Moderator
Mitarbeiter
Es ist erst einmal Unsinn, eine Datei aus dem src Bereich so zu öffnen. Du entwickelst doch etwas, das später nicht nur auf Deinem Rechner laufen soll. Und wenn da das Android Studio verwendet wird, dann wird es vermutlich gar eine Android App sein - und Du wirst unter Android ja nicht die Struktur des Dateisystems haben, wie auf Deinem Entwicklungsrechner.

So Dateien mit Daten, die zur Entwicklungszeit fest gelegt werden und die zur Laufzeit geladen werden sollen, nennen sich Ressourcen. Du solltest die Dateien also entsprechend ablegen (src/main/resources statt src/main/java) und dann wie Ressourcen laden (z.B. getClass().getResourceAsStream("....") )
 

m0$tw4nt3d

Mitglied
Es ist erst einmal Unsinn, eine Datei aus dem src Bereich so zu öffnen. Du entwickelst doch etwas, das später nicht nur auf Deinem Rechner laufen soll. Und wenn da das Android Studio verwendet wird, dann wird es vermutlich gar eine Android App sein - und Du wirst unter Android ja nicht die Struktur des Dateisystems haben, wie auf Deinem Entwicklungsrechner.

So Dateien mit Daten, die zur Entwicklungszeit fest gelegt werden und die zur Laufzeit geladen werden sollen, nennen sich Ressourcen. Du solltest die Dateien also entsprechend ablegen (src/main/resources statt src/main/java) und dann wie Ressourcen laden (z.B. getClass().getResourceAsStream("....") )
Danke für die Idee, allerdings funktioniert das ebenfalls nicht.
 

KonradN

Super-Moderator
Mitarbeiter
Bitte genau schreiben, was Du versucht hast und was für Fehler Du bekommen hast. Dann könnte man Dir auf diesem Weg weiter helfen.

Also wäre wichtig:
  • Wie sieht dein Code jetzt aus?
  • Wo liegt die Datei jetzt?
 

KonradN

Super-Moderator
Mitarbeiter
Ach ja - ist es eine Android App, die Du schreibst? Dann sollte man auf die Resource Verwaltung von Android zurück greifen.

Dann würde man
  • die Datei unter res/raw platzieren (SO es keine andere Resource ist wie drawable oder so).
  • den Zugriff in etwa so machen: try (InputStream inputStream = getResources().openRawResource(R.raw.myFile)) {

Da wäre dann evtl. dies interessant:
App resources overview | Android Developers

(Und sorry, den Android Aspekt hatte ich nach der ursprünglichen Frage nicht mehr berücksichtigt und nur noch das Standard Java Vorgehen vorgestellt. Diesen Part hätte ich auch in #2 bereits benennen können und sollen.)
 

m0$tw4nt3d

Mitglied
Vielen Dank für die weiteren Ideen und Anmerkungen, ich habe mich jetzt dafür entschieden die App mit Kivy zu schreiben, da mir das unkomplizierter erschien
 

Neue Themen


Oben