Input/Output FileInputStream java.io.FileNotFoundException

purzel

Bekanntes Mitglied
Hallo Community,

ich arbeite das erste Mal mit einlesen und speichern von Dateien. Mein Problem:

Wenn ich eine Datei über FileInputStream einlesen will bekomme ich immer eine java.io.FileNotFoundException! Sobald ich aber die Datei mit Pfad angebe geht es, nur wenn ich die Datei über das Package laden will geht nix mehr :(

Wer kann mir einen Tipp geben?

Fehlermeldung:
java.io.FileNotFoundException: file:/home/purzel/workspace/Japanisch_lernen/bin/japanisch_lernen/Files/meine_jp_schriftart.TTF (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at japanisch_lernen.InstallFont$2.run(InstallFont.java:76)
at java.lang.Thread.run(Thread.java:662)
Exception in thread "Thread-1" java.lang.NullPointerException
at japanisch_lernen.SelectInstallDirectory.<init>(SelectInstallDirectory.java:43)
at japanisch_lernen.InstallFont$2.run(InstallFont.java:84)
at java.lang.Thread.run(Thread.java:662)

Mein Code (Auschnitt):
Java:
/*
* Datei kopieren
 */
FileInputStream fis = null;
try {
	fis = new FileInputStream(getClass().getResource("Files/meine_jp_schriftart.TTF").toString()); (geht nicht!)
	//fis = new FileInputStream("/home/purzel/workspace/Japanisch_lernen/bin/japanisch_lernen/Files/meine_jp_schriftart.TTF"); (geht!)
} catch (FileNotFoundException e1) {
	// TODO Auto-generated catch block
	e1.printStackTrace();
}
 FileOutputStream fos = null;
try {
	fos = new FileOutputStream(new SelectInstallDirectory().getPath() + "/meine_jp_schriftart.TTF"); (geht nicht!)
	//fos = new FileOutputStream("/home/purzel/Desktop/meine_jp_schriftart.TTF"); (geht!)
} catch (FileNotFoundException e1) {
	// TODO Auto-generated catch block
	e1.printStackTrace();
}
...

Die Datei befindet sich im Package japanisch_lernen.Files! Sie ist auch im "bin"-Verzeichnis vorhanden!

Danke schon mal! :)

LG Purzel
 

TR

Aktives Mitglied
Code:
/japanisch_lernen
fehlt davor
und man könnte auch
Code:
getResourceAsStream
statt
Code:
getResource
verwenden (jedenfalls beim einlesen)
 
Zuletzt bearbeitet:

TR

Aktives Mitglied
Java:
fis = new FileInputStream(new File(getClass().getResource("japanisch_lernen/Files/meine_jp_schriftart.TTF").toURI()));
und so?

EDIT besser so:
Java:
fis = new FileInputStream(getClass().getResource("japanisch_lernen/Files/meine_jp_schriftart.TTF").getFile());
 
Zuletzt bearbeitet:

purzel

Bekanntes Mitglied
Java:
fis = new FileInputStream(new File(getClass().getResource("japanisch_lernen/Files/meine_jp_schriftart.TTF").toURI()));
und so?

EDIT besser so:
Java:
fis = new FileInputStream(getClass().getResource("japanisch_lernen/Files/meine_jp_schriftart.TTF").getFile());

Da bekomme ich das raus:
Exception in thread "Thread-1" java.lang.NullPointerException
at japanisch_lernen.InstallFont$2.run(InstallFont.java:80)
at java.lang.Thread.run(Thread.java:662)
 
Zuletzt bearbeitet:

purzel

Bekanntes Mitglied
und was steht in Zeile 80 ?

Da steht:

Java:
/*
* Datei kopieren
 */
FileInputStream fis = null;
try {
    //fis = new FileInputStream(getClass().getResource("Files/meine_jp_schriftart.TTF").toString());
    fis = new FileInputStream(getClass().getResource("japanisch_lernen/Files/meine_jp_schriftart.TTF").getFile());
    //fis = new FileInputStream("/home/purzel/workspace/Japanisch_lernen/bin/japanisch_lernen/Files/meine_jp_schriftart.TTF");
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace(); <-- Zeile 80!
}
 FileOutputStream fos = null;
try {
    fos = new FileOutputStream(new SelectInstallDirectory().getPath() + "/meine_jp_schriftart.TTF");
    //fos = new FileOutputStream("/home/purzel/Desktop/meine_jp_schriftart.TTF");
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
 

jgh

Top Contributor
kopiere mal den Ordner (mit allen Inhalten) Files direkt auf die Root deines Projektes Japanisch_lernen
und dann kannst du einfach mit [c]new File("./Files/meine_jp_schriftart.TTF")[/c] darauf zugreifen.
 
S

SlaterB

Gast
zum ersten der beiden Probleme:

immer ruhig und strukturiert vorgehen, kein Code beißt:
> fis = new FileInputStream(getClass().getResource("Files/meine_jp_schriftart.TTF").toString());

da ist eine Zwischenstufe doch [c]getClass().getResource("Files/meine_jp_schriftart.TTF").toString()[/c],
schau dir doch diesen String an!
du weißt außerdem dass der String "/home/purzel/workspace/Japanisch_lernen/bin/japanisch_lernen/Files/meine_jp_schriftart.TTF"
funktioniert, und die Fehlermeldung gibt einen ähnlichen String aus,
man kann den Fehler eigentlich schon an der Fehlermeldung erkennen, aber bitte mal den String ausgeben und selber lernen
 

purzel

Bekanntes Mitglied
zum ersten der beiden Probleme:

immer ruhig und strukturiert vorgehen, kein Code beißt:
> fis = new FileInputStream(getClass().getResource("Files/meine_jp_schriftart.TTF").toString());

da ist eine Zwischenstufe doch [c]getClass().getResource("Files/meine_jp_schriftart.TTF").toString()[/c],
schau dir doch diesen String an!
du weißt außerdem dass der String "/home/purzel/workspace/Japanisch_lernen/bin/japanisch_lernen/Files/meine_jp_schriftart.TTF"
funktioniert, und die Fehlermeldung gibt einen ähnlichen String aus,
man kann den Fehler eigentlich schon an der Fehlermeldung erkennen, aber bitte mal den String ausgeben und selber lernen

Zum ersteren:

Java:
FileInputStream fis = null;
;) - oder meinst Du was anderes? ???:L

Zu 2.:


;(
 
S

SlaterB

Gast
keine Ahnung wo du inzwischen bist,
ich jedenfalls bezog mich auf den Anfang,

ohne Rätsel nun:
> getClass().getResource("Files/meine_jp_schriftart.TTF").toString()
liefert: "file:/home/purzel/workspace/Japanisch_lernen/bin/japanisch_lernen/Files/meine_jp_schriftart.TTF"
genau das meckerte die Fehlermeldung im ersten Post auch an, das "file:" muss am Anfang weg,
das könnte manuell geschnippelt werden, aber auch erreicht werden indem getPath() statt toString() aufgerufen wird

wenn du inzwsichen ganz andere Ideen wie verschobenes Verzeichnis verfolgst, dann vielleicht nicht mehr so nützlich
 

purzel

Bekanntes Mitglied
keine Ahnung wo du inzwischen bist,
ich jedenfalls bezog mich auf den Anfang,

ohne Rätsel nun:
> getClass().getResource("Files/meine_jp_schriftart.TTF").toString()
liefert: "file:/home/purzel/workspace/Japanisch_lernen/bin/japanisch_lernen/Files/meine_jp_schriftart.TTF"
genau das meckerte die Fehlermeldung im ersten Post auch an, das "file:" muss am Anfang weg,
das könnte manuell geschnippelt werden, aber auch erreicht werden indem getPath() statt toString() aufgerufen wird

wenn du inzwsichen ganz andere Ideen wie verschobenes Verzeichnis verfolgst, dann vielleicht nicht mehr so nützlich

Naja der Test war auf den ersten Post von mir bezogen! Ok, ich dachte dieses "file:" kommt nur in der Fehlerausgabe, aber nun bin ich etwas schlauer - Danke :)

PS: erhalte trotzdem noch eine NullPointerException! :(

€dit:

try-block: FileInputStream: java.io.FileInputStream@3f96ee
Exception in thread "Thread-1" java.lang.NullPointerException
at japanisch_lernen.SelectInstallDirectory.<init>(SelectInstallDirectory.java:43)
at japanisch_lernen.InstallFont$2.run(InstallFont.java:86)
at java.lang.Thread.run(Thread.java:662)
 
Zuletzt bearbeitet:

TR

Aktives Mitglied
ein
Code:
/
vor japanisch_lernen fehlt, dann sollte es funktionieren! (bezogen auf meinen letzten Vorschlag!)
 

purzel

Bekanntes Mitglied
@TR und SlaterB


Fehlermeldung:
try-block: FileInputStream: java.io.FileInputStream@3f96ee
Exception in thread "Thread-1" java.lang.NullPointerException
at japanisch_lernen.SelectInstallDirectory.<init>(SelectInstallDirectory.java:43)
at japanisch_lernen.InstallFont$2.run(InstallFont.java:86)
at java.lang.Thread.run(Thread.java:662)

Code:
Java:
/* // Zeile 70
* Datei kopieren
 */
FileInputStream fis = null;
try {
    fis = new FileInputStream(getClass().getResource("/japanisch_lernen/Files/meine_jp_schriftart.TTF").getPath());
    System.out.println("try-block: FileInputStream: " + fis);
    //fis = new FileInputStream("/home/purzel/workspace/Japanisch_lernen/bin/japanisch_lernen/Files/meine_jp_schriftart.TTF");
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    System.out.println("catch-block: FileInputStream: " + fis);
    e1.printStackTrace();
}
 FileOutputStream fos = null;
try {
    fos = new FileOutputStream(new SelectInstallDirectory().getPath() + "/meine_jp_schriftart.TTF");
    //fos = new FileOutputStream("/home/purzel/Desktop/meine_jp_schriftart.TTF");
} catch (FileNotFoundException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
} // Zeile 90
 
Zuletzt bearbeitet:
S

SlaterB

Gast
vielleicht kannst du die Fehlermeldung nicht lesen, da übersetze ich sie dir:

> at japanisch_lernen.InstallFont$2.run(InstallFont.java:86)
spricht von Zeile 86 in dem von dir geposteten Code, noch halbwegs auffindbar

> at japanisch_lernen.SelectInstallDirectory.<init>(SelectInstallDirectory.java:43)
besagt dann klipp und klar, dass in einem Konstruktor ("<init>") von SelectInstallDirectory irgendwas schiefgeht, in Zeile 43

und die einzige Information die du also postest, ist der Aufruf new SelectInstallDirectory(),
die Klasse SelectInstallDirectory selber verschweigst du, wäre sie nicht extrem hiflreich?
 

purzel

Bekanntes Mitglied
Ah, Ok Danke, Ihr habt Recht! War ein Fehler von mir *schäm*

hier die Klasse "SelectInstallDirectory":

Java:
package japanisch_lernen;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * @author purzel
 *
 */
public class SelectInstallDirectory {
	File f = null;
	
	public SelectInstallDirectory() {		
		JFrame jframe = new JFrame("Select Installations Directory...");
		jframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		jframe.setSize(500, 350); //Width, Height
		
		JPanel pane = new JPanel(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();
		
		JFileChooser filechooser = new JFileChooser();
		filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int returnVal = filechooser.showOpenDialog(null);
        
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            f = filechooser.getSelectedFile();
            System.out.println(f.getPath());
        }
		c.fill = GridBagConstraints.HORIZONTAL;
		c.gridx = 0; // Column
		c.gridy = 0; // Row
		c.gridwidth = 2;
		pane.add(new JLabel(f.getPath()), c);
		
		JButton okbtn = new JButton("OK");
		okbtn.addActionListener(new ActionListener() {
	        public void actionPerformed(ActionEvent arg0) {
	        	//closeFrame();
	        }
        });
		c.fill = GridBagConstraints.HORIZONTAL;
		c.gridx = 0;
		c.gridy = 1;
		c.gridwidth = 1;
		pane.add(okbtn, c);
		
		jframe.add(pane);
		jframe.setVisible(true);
		jframe.dispose();
	}
	
	public String getPath() {
		return f.getPath();
	}
}

Angeblich hat er was mit dem
Code:
public String getPath() { return f.getPath(); }

Sorry!
 
S

SlaterB

Gast
das ist doch ein Riesenberg an neuen Informationen,
es öffnet sich also ein FileChooser in dem du etwas auswählst kurz vor der Execption?
wie kann man das denn verschweigen? ;)

anscheinend wählst du da komisch oder gar nicht aus, bist du dir da in der Bedienung sicher, hat das schon je irgendwo funktioniert?

oder kommt die Exception vor dem FileChooser, bist du dir mit der Zeile sicher?
du kannst vor Zeile 35 auch
System.out.println("fi ist: "+f);
schreiben, erscheint die Ausgabe "f ist: null"?

> Angeblich hat er was mit [Methode]
nein halt, die Exception tritt doch im Konstruktor auf? welche Zeile ist 43?

edit: wenn der FileChooser abgebrochen wird, bleib f natürlich für immer null und die Methode ist eine tickende Zeitbombe,
wie siehts also aus, was macht der FileChooser? Info über Info benötigt, ist doch alles eigentlich klar ;)
 
Zuletzt bearbeitet von einem Moderator:

purzel

Bekanntes Mitglied
das ist doch ein Riesenberg an neuen Informationen,
es öffnet sich also ein FileChooser in dem du etwas auswählst kurz vor der Execption?
wie kann man das denn verschweigen? ;)

anscheinend wählst du da komisch oder gar nicht aus, bist du dir da in der Bedienung sicher, hat das schon je irgendwo funktioniert?

oder kommt die Exception vor dem FileChooser, bist du dir mit der Zeile sicher?
du kannst vor Zeile 35 auch
System.out.println("fi ist: "+f);
schreiben, erscheint die Ausgabe "f ist: null"?

Na es kommt wie du schon richtig sagst, der FileChooser :)
Dann wähle ich ein Verzeichnis aus, klick auf Öffnen und komme zu dem vorherigen Fenster zurück.
Da steht dann: Install-Directory: /home/purzel/Desktop (habe ich mal testweise ausgewählt!)

Kann es sein das ihm der / am Ende vom Install-Directory fehlt? :rtfm:

Zeile 43 ist:
Code:
JButton okbtn = new JButton("OK");

Habe mal testweise alles was zum JFrame gehört auskommentiert, dann zeigt er folgende Zeile als Fehlerquelle an:

public String getPath() {
return f.getPath(); <-- FEHLER!
}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ich hab mein letztes Posting noch weiter editiert,
ich bin jetzt auch viel zu schnell,

im Grunde wieder ganz ruhig: was ist eigentlich der Fehler aktuell?, in welcher Zeile exakt, noch im Konstruktor oder später beim Methodenaufruf?.
was ist f usw., den ganzen Ablauf der Reihe nach verfolgen und den Fehlerzustand feststellen
 

TR

Aktives Mitglied
Java:
 pane.add(new JLabel(f.getPath()), c);

Diese Zeile wird knallen. wahrscheinlich weil er im Filechooser "Abbrechen" gedrückt hat.
Den das System.out der ausgewählten Datei wird auch nicht ausgegeben!
 

purzel

Bekanntes Mitglied
ich hab mein letztes Posting noch weiter editiert,
ich bin jetzt auch viel zu schnell,

im Grunde wieder ganz ruhig: was ist eigentlich der Fehler aktuell?, in welcher Zeile exakt, noch im Konstruktor oder später beim Methodenaufruf?.
was ist f usw., den ganzen Ablauf der Reihe nach verfolgen und den Fehlerzustand feststellen

Edit siehe oben ;)

f ist der Filechosser, der Fehler kommt nach dem ich auf den Button installieren drücke bei der Klasse InstallFont (siehe ersten Post)
 

purzel

Bekanntes Mitglied
Java:
 pane.add(new JLabel(f.getPath()), c);

Diese Zeile wird knallen. wahrscheinlich weil er im Filechooser "Abbrechen" gedrückt hat.
Den das System.out der ausgewählten Datei wird auch nicht ausgegeben!

Nein, ich drücke Öffnen, bei Abbrechen kommt:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at japanisch_lernen.SelectInstallDirectory.<init>(SelectInstallDirectory.java:41)
at japanisch_lernen.InstallFont.<init>(InstallFont.java:52)
at japanisch_lernen.Help$1.actionPerformed(Help.java:41)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Zeile 52 von InstallFont ist:

Code:
pane.add(new JLabel("Install-Directory: " + new SelectInstallDirectory().getPath()), c);
 
S

SlaterB

Gast
> f ist der Filechosser
f ist das File!
und wenn du abbrichst dann kommt der Fehler irgendwann bei Zugriff auf das File welches null ist,
ist ja klar, ist ja langweilig, wo immer das auch überall passiert, gibt ja anscheinend mehrere Stellen,

ansonsten noch ne Frage?
bitte alles nochmal neu sortieren und neu posten, der neue StackTrace ist ja ein ganz anderer, GUI-Code wird auskommentiert oder nicht usw..
 

purzel

Bekanntes Mitglied
Also:

habe mal die Gui auskommentiert, hier das Ergebnis:
Java:
package japanisch_lernen;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * @author purzel
 *
 */
public class SelectInstallDirectory {
	File f = null;
	
	public SelectInstallDirectory() {		
		/*JFrame jframe = new JFrame("Select Installations Directory...");
		jframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		jframe.setSize(500, 350); //Width, Height
		
		JPanel pane = new JPanel(new GridBagLayout());
		GridBagConstraints c = new GridBagConstraints();*/
		
		JFileChooser filechooser = new JFileChooser();
		filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int returnVal = filechooser.showOpenDialog(null);
        
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            f = filechooser.getSelectedFile();
            System.out.println(f.getPath());
        }
		/*c.fill = GridBagConstraints.HORIZONTAL;
		c.gridx = 0; // Column
		c.gridy = 0; // Row
		c.gridwidth = 2;
		pane.add(new JLabel(f.getPath()), c);
		
		JButton okbtn = new JButton("OK");
		okbtn.addActionListener(new ActionListener() {
	        public void actionPerformed(ActionEvent arg0) {
	        	//closeFrame();
	        }
        });
		c.fill = GridBagConstraints.HORIZONTAL;
		c.gridx = 0;
		c.gridy = 1;
		c.gridwidth = 1;
		pane.add(okbtn, c);
		
		jframe.add(pane);
		jframe.setVisible(true);
		jframe.dispose();*/
	}
	
	public String getPath() {
		return f.getPath();
	}
}

Fehler tritt bei
Code:
return f.getPath()
auf in der Methode
Code:
public String getPath()

Desweiteren ist zuständig folgende if-Clausl:

Java:
JFileChooser filechooser = new JFileChooser();
filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = filechooser.showOpenDialog(null);

if (returnVal == JFileChooser.APPROVE_OPTION) {
f = filechooser.getSelectedFile();
System.out.println(f.getPath());
}

Ich will bei
Code:
f = filechooser.getSelectFile();
das Verzeichnis auswählen, kann es sein, dass das
Code:
getSelectFile()
nur für Dateien zustängig ist? ???:L
 
Zuletzt bearbeitet:

TR

Aktives Mitglied
nö.
aber dein
Code:
System.out.println(f.getPath());
wird ausgegeben?
Wie schaut dein Log dazu jetzt aus?
 

purzel

Bekanntes Mitglied
nö.
aber dein
Code:
System.out.println(f.getPath());
wird ausgegeben?
Wie schaut dein Log dazu jetzt aus?

Ja wird ausgegeben! Habe allerdings dazu noch was gefunden:

Java:
f = filechooser.getCurrentDirectory();

speichert das Verzeichnis, nicht als Datei wie ich es vorher hatte - dummer Fehler :/

Jetzt habe ich es so:

Java:
public File getPath() {
	//return f.getPath();
	return f;
}

ich übergebe das Verzeichnis dann der Klasse InstallFont, korrigiert mich bitte wenn ich falsch liege...

Ach und noch was, wenn ich dann das Verzeichnis auswähle und öffnen klicke geht die Übertragung los, allerdings wir bei jedem Prozent der FileChooser neu geöffnet - wie kann ich das beseitigen?

€dit: Kommando zurück,
Code:
f = filechooser.getSelectFile()
war schon richtig :bahnhof:

aber das File ist schon richtig in der Methode getPath().

Nur kommt trotzdem jedesmal immer diese Abfrage...
 
Zuletzt bearbeitet:

purzel

Bekanntes Mitglied
Ah bin ich dämlich, hatte den FileOutputStream in einer Schleife drin, deshalb kam immer wieder dieses Fenster - naja ist ja auch schon spät :lol:

Jetzt funktioniert es wie gewünscht! :)

Danke euch beiden :toll:
 

purzel

Bekanntes Mitglied
Hi,

Sorry wenn ich das Thema noch mal aufwärme, aber ich habe jetzt das Programm in ein Jar-Archiv umgewandelt. Leider kann er jetzt die Datei nicht mehr laden, wenn ich ausführe (ohne jar) geht es...

Hat jemand eine Ahnung?

Exception:
java.io.FileNotFoundException: file:/home/purzel/Japanisch_lernen.jar!/japanisch_lernen/Files/meine_jp_schriftart.TTF (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at japanisch_lernen.InstallFont$2.run(InstallFont.java:79)
at java.lang.Thread.run(Thread.java:662)
java.lang.NullPointerException
at japanisch_lernen.InstallFont.copy(InstallFont.java:139)
at japanisch_lernen.InstallFont.access$0(InstallFont.java:135)
at japanisch_lernen.InstallFont$2.run(InstallFont.java:88)
at java.lang.Thread.run(Thread.java:662)
Exception in thread "Thread-1" java.lang.NullPointerException
at japanisch_lernen.InstallFont$2.run(InstallFont.java:93)
at java.lang.Thread.run(Thread.java:662)

Was mich ein wenig verwirt ist, das hinter dem .jar ein ! steht:
Code:
/home/purzel/Japanisch_lernen.jar!/japanisch_lernen/Files/meine_jp_schriftart.TTF

Hier der relevante Code:
(InstallFont)
[JAVA=77]
FileInputStream fis = null;
try {
fis = new FileInputStream(getClass().getResource("/japanisch_lernen/Files/arialuni.TTF").getPath());
} catch (FileNotFoundException e) {
e.printStackTrace();


/*
/* Datei kopieren
*/
try {
copy(fis, fos);
} catch (Exception e) {
e.printStackTrace();
}
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
[/code]

Danke schon mal :)
 

netzBone

Mitglied
Hi,

so wie dein Code am Anfang beschrieben hast geht es natürlich auch.
Einfach über den FileReader einlesen, jedoch kommt es auf deine IDE(Entwicklerumgebung) an.
In Eclipse bspw. musst du den File so einlesen: C:\\Programs\\...\\
also immer doppel Backslash, das gilt für viele IDE´s
einfach ausprobieren. würde da nicht tausend Methoden ausprobieren, dein passt

LG

Tobi
 

purzel

Bekanntes Mitglied
Einfach über den FileReader einlesen, jedoch kommt es auf deine IDE(Entwicklerumgebung) an.
In Eclipse bspw. musst du den File so einlesen: C:\\Programs\\...\\
also immer doppel Backslash, das gilt für viele IDE´s
einfach ausprobieren. würde da nicht tausend Methoden ausprobieren, dein passt

LG

Tobi

Hi, Danke für deine Antwort!

Ich benutze Eclipse und Debian (Linux). Ich habe schon verschiedene Möglichkeiten ausprobiert, aber nichts hat geholfen :(

Wenn ich dann mit dem InputStream mache, statt mit dem FileInputStream - dann bekomme ich aus einer 23 MB großen Datei eine 2,2 GB große Datei ;(

Hast du vllt. einen Codeschnipsel, der helfen könnte?

LG

Purzel
 
S

SlaterB

Gast
mit FileInputStream und File kannst du nicht mehr arbeiten wenn es um eine Datei innerhalb eines Jars geht,
dann hilft nur noch getClass().getResourceAsStream(), was vielleicht sowieso angenehmer ist


wäre auch lockerleicht überall zu finden gewesen.., Suchbegriffe 'java datei aus jar lesen'
 

purzel

Bekanntes Mitglied
mit FileInputStream und File kannst du nicht mehr arbeiten wenn es um eine Datei innerhalb eines Jars geht,
dann hilft nur noch getClass().getResourceAsStream(), was vielleicht sowieso angenehmer ist

Ok, habe das jetzt mal angewendet:

InstallFont.java (Ausschnitt):
[JAVA=83]
FileInputStream fis = null;
InputStream is = null;
BufferedInputStream bis = null;
try {
//fis = new FileInputStream(getClass().getResource("/fonts/meine_jp_schriftart.TTF").getPath());
//fis = new FileInputStream(inputFile);
is = getClass().getResourceAsStream("/fonts/meine_jp_schriftart.TTF");
bis = new BufferedInputStream(is);
byte[] byBuf = new byte[10000];
try {
int byteRead = bis.read(byBuf, 0, 10000);
} catch (IOException e) {
ready.setText("<html><font color=\"red\">Es ist ein Fehler aufgetreten!</font></html>");
e.printStackTrace();
}
//} catch (FileNotFoundException e) {
//ready.setText("<html><font color=\"red\">Es ist ein Fehler aufgetreten!</font></html>");
//e.printStackTrace();
} finally {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
[/code]

Die Datei wird jetzt auch angelegt und beim lesen gefunden, allerdings bekomme ich jetzt diesen Fehler:
java.io.IOException: Bad file descriptor
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:282)
at japanisch_lernen.InstallFont.copy(InstallFont.java:161)
at japanisch_lernen.InstallFont.access$0(InstallFont.java:156)
at japanisch_lernen.InstallFont$2.run(InstallFont.java:109)
at java.lang.Thread.run(Thread.java:662)
java.io.IOException: Bad file descriptor
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:282)
at japanisch_lernen.InstallFont.copy(InstallFont.java:161)
at japanisch_lernen.InstallFont.access$0(InstallFont.java:156)
at japanisch_lernen.InstallFont$2.run(InstallFont.java:109)
at java.lang.Thread.run(Thread.java:662)
java.io.IOException: Bad file descriptor
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:282)
at japanisch_lernen.InstallFont.copy(InstallFont.java:161)
at japanisch_lernen.InstallFont.access$0(InstallFont.java:156)
at japanisch_lernen.InstallFont$2.run(InstallFont.java:109)
at java.lang.Thread.run(Thread.java:662
etc....

Danke schon mal, für den Tipp, wenn das Problem dann auch gelöst ist bin ich glücklich :) DANKE :toll:

wäre auch lockerleicht überall zu finden gewesen.., Suchbegriffe 'java datei aus jar lesen'

Mh, danach hatte ich bis jetzt noch nicht gesucht :bahnhof:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Input/Output FileInputStream Allgemeine Java-Themen 8
JG12111989 FileInputStream - Breite einer bmp-Datei?? Allgemeine Java-Themen 8
C FileInputStream frage Allgemeine Java-Themen 6
C FileInputStream in FileOutputStream leiten Allgemeine Java-Themen 2
M FileInputStream relativer Pfad in .jar Allgemeine Java-Themen 2
R new FileInputStream(in).getChannel(); Allgemeine Java-Themen 7
E relative Adresse bei FileInputStream Allgemeine Java-Themen 2
S FileInputStream aplication Pfad Allgemeine Java-Themen 4
S FileInputStream aus ContextClassLoader? Allgemeine Java-Themen 3
D FileInputStream bzw. BufferedInput Stream Puffern Allgemeine Java-Themen 6
J Probleme mit FileInputStream Allgemeine Java-Themen 5
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
KonradN Java 19 Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
E Java und integrierte Grafikkarten Allgemeine Java-Themen 18
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
A Java unter Win 10 Allgemeine Java-Themen 1
B Woher kommen die Bildschirmkoordinaten beim java Robot? Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
T Java Robot Class - Bot Allgemeine Java-Themen 3
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
izoards Java Home Pfad unabhängig von der Version Allgemeine Java-Themen 7
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
berserkerdq2 Java sql Allgemeine Java-Themen 15
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
LimDul XSD To Java - Überschreiben von Assoziationen Allgemeine Java-Themen 1
Aartiyadav Comparisons and Swapa in Bubble-sort Java Allgemeine Java-Themen 6
KonradN Java 18 Allgemeine Java-Themen 8
N Statistische Auswertung von Logfiles (Einlesen, auswerten und grafische Aufbereitung von logfiles) mit Java Allgemeine Java-Themen 9
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17

Ähnliche Java Themen

Neue Themen


Oben