FileOutputStream aktuelle Speicher Pfad ausgeben

jaykop

Mitglied
Hallo,

ich habe hier ein Kleines Programm das eine Datei Kopiert. Das Programm kann man in der Konsole mit folgendem Befehl aufrufen:

>java FileCopy quelldatei zieldatei

Meine Frage ist jetzt wie ich ausgeben kann wohin die Datei kopiert wurde. Standardmäßig wird es ja dahin kopiert wo sich auch das Programm FileCopy.java befindet. Wenn man keinen Speicherort angegeben hat sondern nur eine Zieldatei. Ob dies jetzt einen sinn hat ist dahingestellt weil man ja schon vorher weiß wo sich die Datei befindet. ;)


Java:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.File;
import java.io.FileNotFoundException;

public class FileCopy {

    public static void main(String[] args) throws java.io.IOException {

        FileInputStream fis =null;
        FileOutputStream fos =null;
        
        try {   // Abfangen wenn Datei nicht vorhanden
            
            // Einlesen zu Kopierende Datei
            fis = new FileInputStream(args[0]);
        
        } catch (FileNotFoundException filenotfoundex) {
            System.out.println("Fehler! Datei nicht gefunden");
        } catch (ArrayIndexOutOfBoundsException arrayEx) {
            System.out.println("Fehler! Keine Datei zum Kopieren vorhanden");
        }
        
        try { // Abfangen wenn Ort zum Speichern nicht angegeben
            
            // Einlesen Speicherort oder Datei Name
            fos = new FileOutputStream((args[1]));
            int c;
            c = fis.read();

            while (c != -1) {
                fos.write(c);
                c = fis.read();
            }
            fis.close();
            fos.close();
        
        } catch (ArrayIndexOutOfBoundsException arrayEx) {
            System.out.println("Fehler! Kein Ort zum Speichern angegeben");
        }
        

    }
}
 
Zuletzt bearbeitet:

jaykop

Mitglied
Danke The_S für die schnelle Antwort.
Wie ist es eigentlich mit meiner Behandlung der exeptions kann man dies übersichtlicher gestallten oder ist das so in Ordnung ?

Hier das Komplette Programm falls es einen interessiert:

Java:
import java.io.*;

public class FileCopy {

    public static void main(String[] args) throws java.io.IOException {

        FileInputStream fis = null;
        FileOutputStream fos = null;

        try {   // Abfangen wenn Datei nicht vorhanden

            // Einlesen zu Kopierende Datei
            fis = new FileInputStream(args[0]);

        } catch (FileNotFoundException filenotfoundex) {
            System.out.println("Fehler! Datei nicht gefunden");
        } catch (ArrayIndexOutOfBoundsException arrayEx) {
            System.out.println("Fehler! Keine Datei zum Kopieren vorhanden");
        }

        try { // Abfangen wenn Ort zum Speichern nicht angegeben

            // Einlesen Speicherort oder Datei Name
            fos = new FileOutputStream((args[1]));
            int c;
            c = fis.read();

            /*
             * Die einzelnen Bytes so lange auslesen bis fis.read() als
             * ergebniss -1 liefert da erst so erkannt wird das man am letzten
             * Byte gelangt ist.
             *
             */
            while (c != -1) {
                fos.write(c);
                c = fis.read();
            }
            System.out.println("Die datei wurde erfolgreich Kopiert nach: \n" + new File(args[1]).getAbsolutePath());
        } catch (ArrayIndexOutOfBoundsException arrayEx) {
            System.out.println("Fehler! Kein Ort zum Speichern angegeben");
        } finally {
            try { // FileInputStream und  FileOutputStream schließen wenn was eingelesen wurde
                if (fis != null) {
                    fis.close();
                }
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException ex) {
            }
        }



    }
}
 
Zuletzt bearbeitet:

The_S

Top Contributor
Nö, passt in deinem konkreten Fall so. Schließen von Streams sollte aber in den (bei dir noch nicht vorhandenen) finally-Block.

Kopieren kann man aber wesentlich schneller ;) .
 

jaykop

Mitglied
Ok Danke. Dies habe ich dann auch oben im Code eingefügt in einem extra Block.

Ja dies war in meinem Fall nur eine Übung um die Exceptions abzufangen. Danach habe ich aber gemerkt das es nicht schlecht wäre den Speicher Ort auszugeben damit man nicht so lange suchen muss wo die Datei abgespeichert wurde. Wie man schneller Kopiert habe ich noch nicht recherchiert.
Wenn du Lust hast kannst du mir ja einen Tipp geben ?
 

The_S

Top Contributor
Die einfachste Erweiterung wäre es, nicht jedes Byte einzeln zu lesen und zu schreiben, sondern ganze Blöcke, bei kleineren Dateien die komplette Datei, auf einmal zu lesen und zu schreiben. Noch schneller geht es mit Java NIO. Und seit "kurzem" gibt es auch NIO2, das noch mal eine gute Ecke schneller als NIO ist.

[EDIT]Bei deiner aktuellen Version hast du das Problem, dass dein OS nicht geschlossen wird, sollte es beim Schließen vom IS zu einer Exception kommen.[/EDIT]
 
Zuletzt bearbeitet:

jaykop

Mitglied
Cool muss ich mir mal anschauen vieleicht lege ich dies auch später als ergänzung hier rein.
Damit man die Geschwindigkeit vergleichen kann.

[EDIT]Bei deiner aktuellen Version hast du das Problem, dass dein OS nicht geschlossen wird, sollte es beim Schließen vom IS zu einer Exception kommen.[/EDIT]

Dies habe ich leider nicht verstanden.
 
Zuletzt bearbeitet:

jaykop

Mitglied
Normalerweise macht man für jede "Schließbare Ressource" einen eigenen try-catch-Block.

Mit diesem Code Block wird doch dies verhindert oder muss ich da nochwas ergänzen ?

Java:
finally {
            try { // FileInputStream und  FileOutputStream schließen wenn was eingelesen wurde
                if (fis != null) {
                    fis.close();
                }
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException ex) {
            }
        }
 

The_S

Top Contributor
Nein, machst du nicht. fis und fos werden im selben try-catch-Block geschlossen. Wirft jetzt fis beim schließen eine Exception wird fos nie geschlossen.
 

jaykop

Mitglied
OK dann lege ich diese lieber in ihre eigenen try Blöcke. Mir fällt aber kein fall ein wo fis z.B beim schließen eine Exeption auswerfen kann. Kein mir einer vieleicht da einen Beispiel nennen?

Java:
finally {
            try { // FileInputStream und FileOutputStream schließen wenn was eingelesen wurde
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException ex) {
            }
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException ex) {
            }
 

The_S

Top Contributor
Prinzipiell reicht es, dass die API-Doc schreibt, dass es sein kann ;) . Bei Datenströmen ist das - zugegeben - auch nicht ganz so kritisch wie bei anderen schließbaren Ressourcen wie bspw. Datenbankverbindungen.
 

ThreadPool

Bekanntes Mitglied
Normalerweise macht man für jede "Schließbare Ressource" einen eigenen try-catch-Block.

Wobei hier, falls denn Java 7 verwendet wird, es möglich ist das etwas abzukürzen indem man das neue "try-catch-with-resources" verwendet und die gemeine Resource das Closeable oder das allgemeinere AutoCloseable implementiert. Die unterdrückten Exceptions die beim Schließen fliegen muss man sich aber selbst rausfummeln. Die hängen dann für gewöhnlich an der IOException (bei Verwendung von Closeable).

Java:
public class FileCopy  {
    public static void main(String[] args){
 
        try (FileInputStream fis  = new FileInputStream(args[0]);
             FileOutputStream fos = new FileOutputStream((args[1]))){   
            int c = -1;
            while ((c = fis.read())!= -1) {
                fos.write(c);
            }
            System.out.println("Die datei wurde erfolgreich Kopiert nach: \n" + args[1]);
        } catch (FileNotFoundException filenotfoundex) {
            System.out.println("Fehler! Datei nicht gefunden");
        } catch (ArrayIndexOutOfBoundsException arrayEx) {
            System.out.println("Fehler! Keine Datei zum Kopieren vorhanden");
        } catch (IOException e) {
            System.out.println("Fehler! Lesen oder Schreiben fehlerhaft!");
        }
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
noah1407 Fileoutputstream Java Basics - Anfänger-Themen 4
S Datei-Speicherort von FileOutputStream Java Basics - Anfänger-Themen 4
M Fileoutputstream: Linux Dateinamen mit Umlaute Java Basics - Anfänger-Themen 4
J FileOutputStream Java Basics - Anfänger-Themen 3
J FileOutputStream write Java Basics - Anfänger-Themen 19
A fileoutputstream ändern Java Basics - Anfänger-Themen 14
Corben Input/Output FileOutputStream - neue Zeile mit write(10) Java Basics - Anfänger-Themen 6
F FileOutputStream.write Java Basics - Anfänger-Themen 2
N FileOutputStream und existenz von Datei überprüfen Java Basics - Anfänger-Themen 2
O OOP FileOutputStream überschreibt ganzen inhalt der txt Java Basics - Anfänger-Themen 4
hdi Datentypen FileOutputStream#write(int) mit ints? Java Basics - Anfänger-Themen 5
J FileOutputStream richtige Pfadangabe? Java Basics - Anfänger-Themen 8
A FileOutputStream -> byte[] (ohne File) Java Basics - Anfänger-Themen 6
G FileOutputStream generieren Java Basics - Anfänger-Themen 2
M FileOutputStream und zu große Zahlen! Java Basics - Anfänger-Themen 10
C FileInputStream und FileOutputStream Java Basics - Anfänger-Themen 4
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
V Die die aktuelle Größe zusätzlich in einem Label angezeigt wird Java Basics - Anfänger-Themen 11
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
H Erste Schritte Aktuelle Uhrzeit auslesen Java Basics - Anfänger-Themen 64
F Aktuelle Stunde, Minute usw. auslesen Java Basics - Anfänger-Themen 10
D Erste Schritte Einsteigerfrage - Überblick über aktuelle Java-Technologien Java Basics - Anfänger-Themen 6
N aktuelle Datum Mikrosekunden genau bestimmen Java Basics - Anfänger-Themen 8
RySa Input/Output aktuelle größe des BufferedWriters ? Java Basics - Anfänger-Themen 5
M LinkedList aktuelle position Java Basics - Anfänger-Themen 3
D JEditorPane aktuelle Zeile auslesen Java Basics - Anfänger-Themen 4
A Aktuelle Parameter Java Basics - Anfänger-Themen 4
B aktuelle Position einer JTextArea ermitteln Java Basics - Anfänger-Themen 6
G TrayIcon: Wie aktuelle Position des Icons erhalten? Java Basics - Anfänger-Themen 2
S Aktuelle Zeile bekommen Java Basics - Anfänger-Themen 2
G Aktuelle Heap-Größe auslesen? Java Basics - Anfänger-Themen 3
T Aktuelle Datum Java Basics - Anfänger-Themen 4
M Datei ins aktuelle Verzeichnis speichern Java Basics - Anfänger-Themen 5
N ins aktuelle fenster schreiben. Java Basics - Anfänger-Themen 6
N Aktuelle Jahreszahl auslesen? Java Basics - Anfänger-Themen 3
R Woher bekomme ich das aktuelle Jahr oder auch Datum? Java Basics - Anfänger-Themen 4
B Türme von Hanoi: aktuelle Belegungszustände ausgeben? Java Basics - Anfänger-Themen 2
T aktuelle Position in einer Datei Java Basics - Anfänger-Themen 4
R Aktuelle URL herausfinden Java Basics - Anfänger-Themen 5
V Ist Off-Heap-Speicher dasselbe wie Stack-Speicher? Java Basics - Anfänger-Themen 2
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
KogoroMori21 Stack und Heap Speicher Java Basics - Anfänger-Themen 1
B Wie speicher ich die Outputs einer Methode in ein Array ein? Java Basics - Anfänger-Themen 1
L Frage zum Speicher bei Arrays Java Basics - Anfänger-Themen 7
L Herunterladbares Java Programm in bestimmten Ordner speicher Java Basics - Anfänger-Themen 3
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
F BufferedImage Speicher Nutzung Java Basics - Anfänger-Themen 2
TheSorm Problem mit Speicher Klasse Java Basics - Anfänger-Themen 3
S Wo speicher ich bilder und sounds ab? Java Basics - Anfänger-Themen 4
TheSorm Kleine Speicher Klasse Java Basics - Anfänger-Themen 24
H Methoden "Leeren" Speicher auf der Festplatte überschreiben Java Basics - Anfänger-Themen 8
C Variablen Speicher von Variablen erhöhen Java Basics - Anfänger-Themen 5
I Werte im Speicher auswerten ohne Umweg über eine Datei Java Basics - Anfänger-Themen 16
H Input/Output ImageIO.load frisst meinen ganzen Speicher weg! Java Basics - Anfänger-Themen 4
R Online-Speicher Java Basics - Anfänger-Themen 7
M Variablen speicher Java Basics - Anfänger-Themen 8
L Wieviel Speicher braucht ein Pixel? Java Basics - Anfänger-Themen 14
B Heap-Speicher wieder freigeben Java Basics - Anfänger-Themen 10
P Belegt "null" Speicher? Java Basics - Anfänger-Themen 25
T Erste Schritte Speicher läuft voll, Diashow, Images Java Basics - Anfänger-Themen 7
C Soundwiedergabe in einem Thread - Speicher besser bereinigen Java Basics - Anfänger-Themen 3
H warum speicher und läd mien editor nicht? Java Basics - Anfänger-Themen 24
T MysqlConnect und Speicher Java Basics - Anfänger-Themen 8
nabla Speicher voll, mit dem GC geht's daneben? Java Basics - Anfänger-Themen 7
hdi Programmier-Stil : Speicher vs. Quellcode Java Basics - Anfänger-Themen 67
G Button soll Speicher Dialog aufrufen Java Basics - Anfänger-Themen 10
N Probleme mit Input/OutputStreams, Daten im Speicher verwalte Java Basics - Anfänger-Themen 2
D nicht genug speicher - profiling trotz error Java Basics - Anfänger-Themen 5
A Problem mit nicht ausreichendem Speicher Java Basics - Anfänger-Themen 3
K speicher(String a, int b) Java Basics - Anfänger-Themen 14
N Zugriff auf Virtuelles Speicher Java Basics - Anfänger-Themen 18
J Belegter Speicher eines Ordners Java Basics - Anfänger-Themen 2
C args[] als statische Variablen speicher oder wie? Java Basics - Anfänger-Themen 12
S Ringbuffer-Speicher mit einem Textfile Java Basics - Anfänger-Themen 2
A eingabe von jTextField lesen und speicher Java Basics - Anfänger-Themen 5
D Werte in Array speicher Java Basics - Anfänger-Themen 8
M Hilfe: Speicher freigeben? Java Basics - Anfänger-Themen 4
G Speicher als .txt -gibt ein Problem! Java Basics - Anfänger-Themen 6
A Speicher von VM ändern ohne Parameter Java Basics - Anfänger-Themen 3
S Speicher freigeben? Java Basics - Anfänger-Themen 5
T Größe eines Objektes im Speicher Java Basics - Anfänger-Themen 4
G Wieviel Speicher verbraucht ein Array? Java Basics - Anfänger-Themen 7
D Mit Java auf Speicher zugreifen Java Basics - Anfänger-Themen 3
L-ectron-X Speicher freigeben - Garbage Collection Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben