Klassen nach Bedingung laden

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi,
ich habe ein Problem.
Ich möchte mein Entpackungprogramm sagen, dass wenn die Datei mit zip endet, er ZipOutputStream laden soll und bei gzip GZIPOutputStream.

Nur leider geht das nicht. Eine neue Klasse möchte ich deswegen nicht schreiben.

Liebe Grüße
Reality
 

thE_29

Top Contributor
?

wieso nimmst nicht den String Operator endsWith("zip") mache das und bei gzip mache das!

und mit File lässt du dir den Dateinamen als string zurückbirngen (getAbsolutePath()) und dann endswith..
 

Reality

Top Contributor
Klar, den String übergebe ich mit endsWith(), aber das funktioniert eben nicht:
Code:
//Pseudo-Code
if(file.toString().endsWith("zip")){
ZipInputStream zip = new ZipInpuStream(new FileInputStream(file));
}

else if(file.toString().endsWith("gz")){
GZIPInputStream zip = new GZIPInpuStream(new FileInputStream(file));
}
 

Reality

Top Contributor
Das hat damit nichts zu tun. Ich habe auch mal witzweise folgendes ausprobiert:
Wenn Zahl == 0, dann lade Gzip, ansonsten Zip.

Liebe Grüße
Reality
 

thE_29

Top Contributor
ich würds mal probieren ;)
mach einfach mal ein System.out.println(file.toString);
und dann System.out.println(file.getAb...());

und schau was er dir ausgibt ;) vielleicht hats da schon was!
 

Reality

Top Contributor
Code:
import java.io.*;
import javax.swing.JOptionPane;
import java.util.zip.*;

class DeComprimize {
  File files[];
  GUI frame;
  
  DeComprimize(File files[], GUI frame) throws IOException{
    this.files = files;
    this.frame = frame;

    decomprimize();
  }

  private void decomprimize() throws IOException{

    for(byte i = 0; i < files.length; i++){
      if (files[i].exists() && files[i].toString().endsWith("gz")) {
        int laenge = files[i].toString().length() - 3;
        String name = files[i].toString().substring(0, laenge);

        byte buffer[] = new byte[6000];
        int gelesen;

        FileOutputStream output = new FileOutputStream(name);
        FileInputStream input = new FileInputStream(files[i]);
        if(files[i].toString().endsWith("zip"))
          GZIPInputStream gzipIn = new GZIPInputStream(input);

        else
          ZipInputStream gzipIn = new ZipInputStream(input);

        while ( (gelesen = gzipIn.read(buffer, 0, buffer.length)) != -1)
          output.write(buffer, 0, gelesen);

        JOptionPane.showMessageDialog(frame,
                                      files[i].toString() + " erfolgreich entpackt");

        output.close();
        gzipIn.close();
        input.close();
      }
      
      else
        JOptionPane.showMessageDialog(frame, "Falsches Format!");
    }
  }
}
 

thE_29

Top Contributor
wie soll der jemals in die untere Bedingung kommen wenn sowas erfüllt werden muss?

if (files.exists() && files.toString().endsWith("gz"))

?? glaube kaum das .zip und .gzip mit gz aufhören ;)
 

Reality

Top Contributor
Hi,
gzip endet mit gz.
Ich habe etwas Daten Chaos, ich ändere ständig etwas.
Es müsste so heissen:
Code:
if (files[i].exists() && files[i].toString().endsWith("gz") || files[i].toString().endsWith("zip"))

Aber das ändert nichts an der Tatsache, dass es nicht funktioniert.
Immer kommt die Fehlermeldung:
Keine Anweisung in Zeile bla. ';' in Zeile bla erwartet.

Du kannst ja mal selbst das komplette Projekt compilieren:

GUI:
Code:
import javax.swing.*;
import java.io.*;
import java.awt.event.*;

public class GUI extends JFrame implements ActionListener{

  JPanel contentPane = new JPanel();
  JMenuBar mBar = new JMenuBar();

  JButton btEntpacken = new JButton("Entpacken");
  JButton btPacken = new JButton("Packen");
  JMenu datei = new JMenu("Datei");
  JMenuItem decomp = new JMenuItem("EntPacken");
  JMenuItem comp = new JMenuItem("Packen");
  JMenuItem close = new JMenuItem("Schließen");
  JComboBox method = new JComboBox();

  public GUI(){
    contentPane.add(btEntpacken);
    contentPane.add(btPacken);
    contentPane.add(method);

    btEntpacken.addActionListener(this);
    btPacken.addActionListener(this);
    decomp.addActionListener(this);
    comp.addActionListener(this);
    close.addActionListener(this);

    setJMenuBar(mBar);
    setContentPane(contentPane);

    datei.add(decomp);
    datei.add(comp);
    datei.add(close);

    method.addItem("gzip");
    method.addItem("zip");

    mBar.add(datei);
  }

  public void actionPerformed(ActionEvent ae){
    File files[];

    if(ae.getSource() == close)
      System.exit(0);

    else{
      JFileChooser fd = new JFileChooser();
      fd.setMultiSelectionEnabled(true);
      int action = fd.showOpenDialog(this);

      if(action == JFileChooser.APPROVE_OPTION){ //falls nicht abgebrochen wurde...
        files = fd.getSelectedFiles();

        if(ae.getSource() == comp || ae.getSource() == btPacken){
          try {
            new Comprimize(files, "GZIP", this);
          }
          catch (IOException e) {}
        }

        else if(ae.getSource() == decomp || ae.getSource() == btEntpacken){
          try{
            new DeComprimize(files,  this);

          }catch(IOException e){}
        }
      }
    }
  }

  public static void main(String args[]){
    JFrame frame= new GUI();
    frame.setSize(300, 100);
    frame.setTitle("Das ultimative Entpackungsprogramm");

    frame.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
      System.exit(0);
    }
    });

    frame.setVisible(true);
    frame.setResizable(false);
  }
}

/*class OnlyZIP implements FileFilter{

  public boolean accept(File file){

    return file.toString().toLowerCase().endsWith(".gz");
  }
}*/

comprimize:
Code:
import java.io.*;
import javax.swing.JOptionPane;
import java.util.zip.*;

class DeComprimize {
  File files[];
  GUI frame;
  
  DeComprimize(File files[], GUI frame) throws IOException{
    this.files = files;
    this.frame = frame;

    decomprimize();
  }

  private void decomprimize() throws IOException{

    for(byte i = 0; i < files.length; i++){
      if (files[i].exists() && files[i].toString().endsWith("gz")) {
        int laenge = files[i].toString().length() - 3;
        String name = files[i].toString().substring(0, laenge);

        byte buffer[] = new byte[6000];
        int gelesen;

        FileOutputStream output = new FileOutputStream(name);
        FileInputStream input = new FileInputStream(files[i]);
        if(files[i].toString().endsWith("zip"))
          GZIPInputStream gzipIn = new GZIPInputStream(input);

        else
          ZipInputStream gzipIn = new ZipInputStream(input);

        while ( (gelesen = gzipIn.read(buffer, 0, buffer.length)) != -1)
          output.write(buffer, 0, gelesen);

        JOptionPane.showMessageDialog(frame,
                                      files[i].toString() + " erfolgreich entpackt");

        output.close();
        gzipIn.close();
        input.close();
      }
      
      else
        JOptionPane.showMessageDialog(frame, "Falsches Format!");
    }
  }
}

Es ist noch nicht ganz fertig, darum ist die JCombox momentan nicht funktionsfähig. Es soll dafür gedacht sein, in welchem Format es komprimieren soll.

Liebe Grüße
Reality
 

thE_29

Top Contributor
Dein If spinnt, das ist es ;)
Code:
if(files[i].toString().endsWith("zip"))
{
          GZIPInputStream gzipIn = new GZIPInputStream(input);
}

        else
{          ZipInputStream gzipIn = new ZipInputStream(input); 
}
 

Reality

Top Contributor
Es kommt dann immernoch eine Fehlermeldung:

Symbol kann nicht gefunden werden: Variable gzipIn in Klasse DeComprimize

Diese Fehlermeldung kommt 2x.

Liebe Grüße
Reality

PS: Bei einer Zeile kann man doch if auch ohne Klammern schreiben. Wieso hat es Probleme gemacht?
 

thE_29

Top Contributor
weil du ein new gehabt hast ;) und das waren 2, weil du zuesrst eine Variable anlegst und dann new sagst!

Code:
        InflaterInputStream gzipIn = null;
        if(files[i].toString().endsWith("zip"))
          gzipIn = new GZIPInputStream(input);
        else
          gzipIn = new ZipInputStream(input);

und er regt sich auf weil du deine gzipIn nur in den ifs angelegt hast und er es dann draußen nicht benutzen kann! so wie schleifen variablen halt ;)
 

Reality

Top Contributor
Scheiße.
Ich merke gerade, dass sich nur von meinem Programm gepackte Dateien wieder entpacken lassen, weil ich eben beim Entpacken die alte Endung wieder herstelle, in dem ich das gz oder zip weglasse. (davor hiess es ja blabla.txt.gz)
Und es kann auch nicht komprimierte dateien entpacken, die mehrere dateien in sich haben.

Liebe Grüße
Reality
 

Reality

Top Contributor
Warum erstellt er mir jetzt leere zip-Files, wenn der Typ zip ist?

Code:
import java.io.*;
import java.util.zip.*;
import javax.swing.JOptionPane;

class Comprimize{

  File files[];
  GUI frame;
  String type;

  Comprimize(File files[], String type, GUI frame) throws IOException{
    this.files = files;
    this.type = (type.equals("zip"))? "zip" : "gz";
    this.frame = frame;

    comprimize();
  }

  private void comprimize() throws IOException{
    byte buffer[] = new byte[6000];
    int gelesen = 0;

    for(byte i = 0; i < files.length; i++){
      if (files[i].exists() && files[i].isFile()) {
        FileInputStream input = new FileInputStream(files[i]);
        FileOutputStream output = new FileOutputStream(
            files[i].toString() + "." + type);
        DeflaterOutputStream gzipOut;

        if(type.equals("zip"))
          gzipOut = new ZipOutputStream(output);

        else
          gzipOut = new GZIPOutputStream(output);
        
        while ( (gelesen = input.read(buffer, 0, buffer.length)) != -1)
          gzipOut.write(buffer, 0, gelesen);

        gzipOut.close();
        output.close();
        input.close();

        JOptionPane.showMessageDialog(frame,
                                      files[i].toString() + " erfolgreich gepackt");
      }

      else {
        JOptionPane.showMessageDialog(frame, "Fehler!",
                                      files[i].toString() + "ist ungültig",
                                      JOptionPane.ERROR_MESSAGE);
      }
    }
  }
}

Liebe Grüße
Reality
 

thE_29

Top Contributor
debugs mal durch und schau nach ob das while überhaupt was zurückliefert und ob er überhaupt das durchgeht ;)
 
B

Beni

Gast
Siehst du die 8 Knöpfe direkt unter "Meldungen"? Klickt die mal durch, einer davon zeigt den Wert der verschiedenen Variablen an (natürlich nur, wenn das Programm läuft, und an einem Breakpoint angelangt ist).
 

Reality

Top Contributor
int gelesen = 10;
und byte buffer[]
[0] = 31;
[1] = -117;
[2] = 8;
der Rest ist 0;

Bei gzipOut steht da:
java.util.ZipOutputStream
written: long = 0

Ich denke, das war mal das wichtigste...

Liebe Grüße
Reality
 

Reality

Top Contributor
Vielleicht sollte ich erwähnen, dass nicht mal der Dialog auftaucht, der sagt, dass die Datei erfolgreich gepackt wurde, obwohl dieser Befehl in der for-Schleife enthalten ist.

Liebe Grüße
Reality
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
alice98 Erste Schritte Liste erstellen ohne vorgefertigte Klassen Java Basics - Anfänger-Themen 1
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
elsaaaaaa Wochentag als String ausgeben mit JDK Klassen Java Basics - Anfänger-Themen 6
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
B Inventar als einzelne Klassen anlegen? Java Basics - Anfänger-Themen 12
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
A Generischen Klassen Java Basics - Anfänger-Themen 8
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
J 2 klassen benutzen Java Basics - Anfänger-Themen 5
A Klassen und methoden Java Basics - Anfänger-Themen 15
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
J Klassen Problem Java Basics - Anfänger-Themen 8
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
C Klassen objektorientiert aufteilen Java Basics - Anfänger-Themen 6
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
F Klassen und Pakete Projektübergreifend (Eclipse) Java Basics - Anfänger-Themen 6
V_Fynn03 Klassen Überweisungen tätigen und einzahlen mit 2 Klassen Java Basics - Anfänger-Themen 1
W Abarbeitungsreihenfolge Anonyme Klassen Java Basics - Anfänger-Themen 2
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
E Klassen implementieren Java Basics - Anfänger-Themen 94
T Interfaces in erbenden Klassen Java Basics - Anfänger-Themen 2
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
P Datentypen, Klassen, Operatoren, Wrapperklassen Java Basics - Anfänger-Themen 2
L Wie teilt man ein Programm in vernünftige Klassen ein? Java Basics - Anfänger-Themen 10
T Klassen Denkfehler im Klassen "dynamisch" instanzieren? Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
A Methode, Klassen Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
G Klassen und Objekte Java Basics - Anfänger-Themen 2
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
D Klassen ausgeben Java Basics - Anfänger-Themen 2
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
Queiser Nicht statische Klassen Java Basics - Anfänger-Themen 6
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
J Gleiche Methode in 2 verschiedenen Klassen - Lösung ? Java Basics - Anfänger-Themen 8
G Refactoring von mehreren identischen Klassen Java Basics - Anfänger-Themen 36
O Wrapper Klassen Java Basics - Anfänger-Themen 6
CptK Best Practice Klassendiagramm aus fertigen Klassen erstellen lassen Java Basics - Anfänger-Themen 2
R OOP Instanzierung in verschiedenen Klassen Java Basics - Anfänger-Themen 8
N Project layout eclipse ( seperate ordner für klassen ? ) Java Basics - Anfänger-Themen 1
B Vererbung Abgeleitete Klassen Bestimmter Typ zuweisen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben