Java Binärdatei kopieren per Streams?


21.04.2023, 19:27
package de.thws;                     // Von mir zum testen von Streams

import java.io.*;

public class PerStreamDateiEinlesen {

    public static void main(String[] args) throws FileNotFoundException {

        copyFileWithErrorHandling3Modularized();
    }

    public static void copyFileWithErrorHandling3Modularized()
    {
        // try-with-resource statement
        try (InputStream fis = new FileInputStream("Maven\\de\\thws\\Lektion17\\Folder.jpg");
             OutputStream fos = new FileOutputStream("copy.jpg");)
        {
            copyImproved(fis, fos);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
    // Hier kopiere ich die Datei
    static void copyImproved(InputStream is, OutputStream os) throws IOException
    {
        byte[] b = new byte[1024];
        int n;
        do
        {
            n = is.read(b); //kann maximal 1024 bytes lesen
            if (n != -1) os.write(b, 0, n);
        }
        while (n != -1);
    }
}

3 Antworten

Da du mit relativen Pfaden arbeitest, hängt es stark vom Working Directory ab.

Wie führst du das Program aus? Über den Play Button in IntelliJ?

Wenn du Konfiguration hinter dem Ausführen bearbeitest, findest du den Parameter vom Working Directory. Vermutlich wird es der Ordner "Maven" sein.

Dazu wird dich die aktuelle Ansicht von IntelliJ iritieren. Du hast aktuell die "Packages" Ansicht geöffnet, welches nicht unbedingt die Ordnerstruktur vom Working Directory aus darstellt.

Der tatsächliche Pfad ist src/main/java/de/thws/Lektion17/Folder.jpg. Das ist auch die übliche Ordnerstruktur bei Java Projekten.

Du kannst übrigens auch normale / im Pfad unter Windows benutzen.

Ich nutze in IntelliJ auch immer die "Project" Struktur. Dort findest du auch u.A. die Ordner src/main.

Du könntest in IntelliJ auch ein Rechtsklick auf deine Datei machen, Copy Path/Reference..., und dann Path from Content Root wählen. Damit hast du den relativen Pfad zum Projekt Hauptorder, welches standardmäßig der Working Directory ist.

Screenshot für den Kommentar:

Bild zum Beitrag

 - (programmieren, Informatik, Java)

RedDevil1982 
Fragesteller
 21.04.2023, 20:05

"Wie führst du das Program aus? Über den Play Button in IntelliJ?"

=> strg + shift + F10

"Dazu wird dich die aktuelle Ansicht von IntelliJ iritieren. Du hast aktuell die "Packages" Ansicht geöffnet, welches nicht unbedingt die Ordnerstruktur vom Working Directory aus darstellt."

=> Wie kann die aktuelle Ansicht umstellen, so das ich die Ordnerstruktur des Working Directory wieder sehe, wo auch der src Ordner ist usw?

0
RedDevil1982 
Fragesteller
 21.04.2023, 20:08

Wie stelle ich die Project Struktur ein?

0
tide1109  21.04.2023, 20:16
@RedDevil1982

Habe meine Antwort um ein Screenshot ergänzt. Die Projekt Struktur findest du beim linken roten Rechteck, wie du vermutlich schon gefunden hast.

Das Tastaturkürzel wird die gleiche Funktion wie der Play Button ausführen.

Auf der rechten Seite mit den roten Rechtecken kannst du die Konfiguration zum Ausühren anpassen.

Im Popup Menü nach Edit Configuration findest du ein Textfeld für Working Directory.

0

Maven\\ kannst du entfernen, denn dort bist du ja schon drin.

Woher ich das weiß:Berufserfahrung – Informatiker Applikationsentwicklung

RedDevil1982 
Fragesteller
 21.04.2023, 19:28
try (InputStream fis = new FileInputStream("de\\thws\\Lektion17\\Folder.jpg");
     OutputStream fos = new FileOutputStream("copy.jpg");)

Kommt weiterhin der Fehler

0
RedDevil1982 
Fragesteller
 21.04.2023, 19:35

Habs geändert geht nicht. Wo liegt der Fehler?

0
RedDevil1982 
Fragesteller
 21.04.2023, 19:42

Der ganze Pfad gemäß Windows Explorer ist:

C:\Users\User\IdeaProjects\Maven\src\main\java\de\thws\lektion17

Dort liegt die Datei Folder.jpg

0
By default the classes in the
java.io
package always resolve relative pathnames against the current user directory. This directory is named by the system property
user.dir
, and is typically the directory in which the Java virtual machine was invoked.

https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/io/File.html


RedDevil1982 
Fragesteller
 21.04.2023, 19:32

???

0
RedDevil1982 
Fragesteller
 21.04.2023, 19:34
@Destranix

Was soll ich hier in der Pfadangabe ändern? Ist doch alles korrekt eingegeben oder nicht?

0
Destranix  21.04.2023, 19:35
@RedDevil1982

Mal einen absoluten Pfad probieren. Mal das Referenzverzeichnis ausgeben lassen. ...

0
RedDevil1982 
Fragesteller
 21.04.2023, 19:38
@Destranix

C:\Users\User\IdeaProjects\Maven\src\main\java\de\thws\lektion17

0
RedDevil1982 
Fragesteller
 21.04.2023, 19:41
@Destranix

So ist der Pfad vorgegeben, als ich ihn aus dem Explorer rauskopiert habe

0
Destranix  21.04.2023, 19:42
@RedDevil1982

Dann hast du womöglich den Ordner von "Lektion17" zu "lektion17" umbenannt und die IDE hat das noch nicht aktualisiert? Und dein realativer Pfad geht nicht, da du es da groß geschrieben hast?

0
RedDevil1982 
Fragesteller
 21.04.2023, 19:47
@Destranix
try (InputStream fis = new FileInputStream("C:\\Users\\User\\IdeaProjects\\Maven\\src\\main\\java\\de\\thws\\lektion17\\Folder.jpg");
     OutputStream fos = new FileOutputStream("copy.jpg");)

So gings. Die Kopie wurde allerdings im src Ordner eins unter dem Maven Ordner abgelegt. Wie kann ich im Projekt-Fenster von IntelliJ den src Ordner einblenden?

Siehe mein Bild oben, dort gibt es den src gar nicht bzw. er wird nicht eingeblendet.

1
Destranix  21.04.2023, 19:50
@RedDevil1982

Weiß ich nicht.

Allerdings sagt dir das etwas anderes: Dein relativer Pfad beginnt im src-Ordner. Deshalb hat deine relative Pfadangabe zuvor auch nicht geklappt.

Versuch es doch mal mit einem relativem Pfad vom src-Ordner aus. Und deine Ausgabe-Datei kannst du ja auch direkt in einem Unterordner erstellen mit passender Pfadangabe.

1
RedDevil1982 
Fragesteller
 21.04.2023, 19:56
@Destranix

Hat geklappt. Vielen Dank! Allerdings würde ich immer noch gerne wissen wie ich den src Ordner in IntelliJ im Projektfenster einblenden kann

Der ganze Pfad ist ja:

C:\Users\User\IdeaProjects\Maven\src\main\java\de\thws\lektion17\Folder.jpg

Warum wird mir in Intellij nur der Projekt-Ordner Maven und dann erst die Packages ab de, thws... angezeigt?

1
Destranix  21.04.2023, 19:57
@RedDevil1982

Weiß ich nicht, ich nutze InteliJ nicht. Evtl. kannst du das in den Einstellungen irgendwo umstellen?

Ansonsten stell doch eine neue Frage dazu, vielleicht weiß hier jemand mehr.

0