Java Klassen verbinden / Wert eines Arrays in einer anderen Klasse benutzen

nico_wagner

Cadet 3rd Year
Registriert
Nov. 2013
Beiträge
59
Hallo,
ich habe gerade mit Java angefangen und habe nun den Auftrag bekommen ein Programm zu schreiben, dass zip Dateien in einem Ordner sucht und diese dann entpackt.
Ich habe selber nur minimale Erfahrungen in Programmieren und versuche durch dieses Projekt ein wenig rein zu kommen.

Ich habe soweit zwei Klassen geschrieben die einmal die Dateien und Ordner in einem Ordner auflistet und in ein Array schreibt und eine Klasse, die diese dann entpacken soll.

Nun weiss ich nicht, wie ich das array in einer anderen Klasse aufrufen kann.


Code:
package log;

import java.io.File;

public class listDir{
	public static void main(String args[]){

		
		File f = new File("C:/svnwork/OCEAN/Beispieldaten/MobiTV/Knoblach 12.11.13");
		File[] files = f.listFiles();
		String pfad[] = new String[files.length];
		for(int a = 0; a < files.length; a++){
			pfad[a] = files[a].getAbsolutePath();
			System.out.println("\n" + pfad[a]);
		}
	}
}

Code:
package log;


import java.util.zip.GZIPInputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class JavaUncompress {
	public static void main(String args[]){
		try{
				String inFilename = "C:/Users/nwagner7/Desktop/infile.gz";
				GZIPInputStream gzipInputStream = null;
				FileInputStream fileInputStream = null;
				gzipInputStream = new GZIPInputStream(new FileInputStream(inFilename));
				String outFilename = inFilename +".txt";
				OutputStream out = new FileOutputStream(outFilename);
				byte[] buf = new byte[1024];
				int len;
				while ((len = gzipInputStream.read(buf)) > 0) {
					out.write(buf, 0, len);
				}
				gzipInputStream.close();
				out.close();
			
		}
		catch(IOException e){
			System.out.println("Exception has been thrown" + e);
		}
	}
}
 
Zunächst mal reicht es eine Klasse zu haben mit einer Main Funktion und das was du suchst nennt sich Übergabe Parameter.

Das heißt wenn du die Werte aus dem Array in die andere Klasse haben willst, sollte die Funktion die die Dateien enpacken soll Parameter empfangen.
Code:
public void extractData(String[][] bla) {
     // Dein Code zum extrahieren
}

Das war jetzt nur nen simples Beispiel, allerdings sollte dir das schon mal minimal helfen.
Stichwort hier Übergabeparameter.

In der main Klasse sollte die Funktion dann aufgerufen werden und der Array an die Funktion übergeben werden.
Oder aber der Konstruktor deiner ExtractKlasse muss Parameter erhalten.
 
Zuletzt bearbeitet:
Danke zunächst für die schnelle Antwort.
ich bekomme leider den Aufruf der Funktion nicht hin:/
Ich habe mir jetzt die Klasse main erstellt mit der main Methode. In dieser wollte ich zunächst die Klasse list Dir aufrufen und in main das Array pfad ausgeben lassen.
 
Du musst die Klasse instanzieren, also die Klasse die später deine Pakete extrahieren soll.

Ungefähr so:
Code:
JavaUncompress uncompress = new JavaUncompress();
Danach kannst du dann die Funktion zum entpacken so aufrufen ungefähr:
Code:
uncompress.namederFunktion(ggf. Parameter);
Deine Funktion in der Klasse JavaUncompress muss natürlich auch ein Rügabeparameter haben.
 
Code?

Üblicherweise hat man nur eine main() Methode, den Einstiegspunkt zum Programmaufruf. Im String-Array befinden sich etwaige Programmparameter (die an der Kommandozeile eingegeben wurden).

Ansonsten arbeitet man mit Instanzen von Klassen und deren Methoden. Was Du möchtest ist eine Klasse zum Auflisten der Dateien in einem Order. Und eine Klasse, die diese Dateien entpackt (so es denn Archive sind).

Code:
class Files {
    public Collection<File> list(File rDirectory) {
        ....
    }
}

class Extract {
    public void uncompress(Collection<File> rFiles) {
        ...
    }
}

class Main {
    public static void main(String[] args) {
        Collection<File> files = new Files().list(new File("C:/svnwork/OCEAN/Beispieldaten/MobiTV/Knoblach 12.11.13"));
        new Extract().uncompress(files);
    }
}

So könnte man die Klassen "verbinden".
 
Ich hab mal schnell ein Beispiel zusammengehackt das zeigt wie man die Daten rumreichen könnte. Du musst natürlich die für dich passenden Typen nutzen und die Methoden mit Leben füllen.

Main.java
Code:
package test;

public class Main {
    public static void main(String[] args) {
        Ls list = new Ls();
        String[] files = list.getFiles("/home/user");
        Unzip.decompress(files);
    }
}

Ls.java
Code:
package test;

public class Ls {
    Ls(){}
    public String[] getFiles(String directory) {
        String[] res = {"abc.zip", "123.zip", "xyz.zip"};
        return res;
    }
}

Unzip.java
Code:
package test;

public class Unzip {
    public static void decompress(String[] files) {
        for (int i=0; i<files.length; ++i) {
            System.out.println("Decompressing: " + files[i]);
        }
    }
}

Ich hab mal noch ne statische Methode reingepackt, da sich das meiner Meinung nach an einigen Stellen anbietet und du das so mal gesehen hast.

Hab länger nichts mehr mit Java gemacht, also bitte nicht schlagen, wenn irgendwo gröberer Murks drin ist :)
 
Wie schon erwähnt wurde:
- Nur eine Klasse hat eine main-Methode. Dies ist der Startpunkt des gesamten Programmes, sprich alles andere muss man von dieser Main-Methode aus erledigen.
- Die Klasse JavaUncompress hat demnach keine main-Methode, sondern so etwas wie eine extractFiles Methode, mit dem Array der Files als Parameter, also so was:
Code:
public class JavaUncompress{
//...
public void extractFiles(String[] files){
// Code zum ausfiltern von gepackten Dateien und zum Entpacken
}
}

Das ganze wird dann in der main-Methode verwendet über:
Code:
//...
JavaUncompress ju = new JavaUncompress();
ju.extractFiles(pfad);

Du kanns in JavaUncompress die Methode extractFiles z.B. auch statisch machen, dann brauchst du das Objekt (hier "ju") davon nicht erstellen, also:
Code:
public class JavaUncompress{
//...
public static void extractFiles(String[] files){
// Code zum Entpacken
}
}

Das Ganze wird dann in der main-Methode wiederum verwendet über:
Code:
//...
JavaUncompress.extractFiles(pfad);
Also direkt über den Klassennamen.

Oder du filterst in der Main-Methode schon die Zip-Files aus, machst dort dann eine Schleife und schreibst eine extractFile Methode so, dass nur ein einzelner Pfad angenommen wird, anstatt dem ganzen Array.

Oder, oder, oder... ;) Die Welt der tausend Möglichkeiten.
 
So..gerade aus dem Urlaub wieder zurück.
Danke für eure zahlreichen Antworten.
Habe nun alles hinbekommen!
 
Zurück
Oben