Dynamische Rückgabewerte

S

Sasku

Gast
Hey Leute,

ich habe in meinem Programm einen FileChooser eingebaut. Und jetzt will ich eine Unterscheidung zw. Ordnern und einzelnen Files schaffen. Gut hinbekommen.

jetzt ist mein Problem, wenn ich den Ordner ausgelesen habe und dann will ich die einzelnen Dateien in eine List schreiben. Dafür gebe ich Sie wieder zurück an eine andere Methode. Mein Problem ist allerdings, dass ich ja verschiedene Rückgabewerte haben kann. Also bei einem Ordner ein Array, wobei ich die einzelnen Files ja übergebe (bzw. den Pfad als String ) .. oder ein einzelnes File.

Wenn ich in meinem Programm einen Ordner auswähle nimmt es allerdings nur Das erste File welches im Ordner ist.

Wie kann ich also meine Rückgabewerte dynamisch machen ... ?

Code:
		if(obj.equals(oFlaeche.add_b)){
			b=false;
			String s = pfadAuswahl2();
			oFlaeche.model.addElement(s);
			if ( oFlaeche.model.size() >= 18 ) {
			oFlaeche.scrollPanel.setPreferredSize(new Dimension(420, oFlaeche.scrollPanel.getHeight()+ 20));
			oFlaeche.scrollPanel.setMinimumSize(new Dimension(420, oFlaeche.scrollPanel.getHeight()+20));
			oFlaeche.list.setBounds(0, 0, 420, oFlaeche.list.getHeight()+20);
			
			try {
				Thread.sleep(500);
			} catch (InterruptedException e1) {
				
				e1.printStackTrace();
			}
			}
			
			

			for(int i = 0; i< oFlaeche.model.getSize(); i++){
				String tmp = oFlaeche.model.getElementAt(i).toString();
				
				for(int j = 0; j<oFlaeche.model.getSize(); j++){
					if(tmp.equals(oFlaeche.model.getElementAt(j).toString())){
						if(j!=i){
							JOptionPane.showMessageDialog(null, "Sie haben zwei identische Dateien ausgewählt.", "FEHLER", JOptionPane.WARNING_MESSAGE);
							oFlaeche.model.removeElementAt(j);
						}
					}
				}
			}
		}		
	}

Code:
    public String pfadAuswahl2(){								
    	
    	
  	   JFileChooser fileChooser = new JFileChooser();										// erzeugt ein JFileChooser Objekt
  	   fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);				// setzt den selektionsmodus auf Dateien und Ordner
  	   int result = fileChooser.showOpenDialog(fileChooser);								// setzt eine int variable wenn der OK-Button gedrückt wurde im FileChooser
  	 
  	   if (result == JFileChooser.APPROVE_OPTION) {											// überprüft ob "ok" gedrückt worden ist,denn Aprove Option  ( s. zeile drunter ) 
  		   																					// gibt einen Wert zurück der gleich dem wert ist der result ist. 
  		   File selectedFile = fileChooser.getSelectedFile();								// nimmt das aktuelle File 

  		   if ( selectedFile.isDirectory()) {												// wird ausgeführt, falls ausgewählte Datei ein Ordner ( Directory ) ist. 
  			   File[] filesInDir = selectedFile.listFiles();
  			   		if ( filesInDir != null ) {
  			   			for ( int i = 0; i< filesInDir.length; i++) {
  			   				  			   				return filesInDir[i].getAbsolutePath();

  			   			}
  			   		}
  			   
  		   }else {
  			   	return selectedFile.getAbsolutePath();										// Rückgabewert des Filechoosers ( wenns kein Ordner ist ) 
  		   }	
  	   	  }
	return null;
  	   }



das hier ist der Code .. einmal der Teil in dem mein FileChooser aufgerufen wird und dann das selektierte File in die Liste geschrieben wird. Und einmal der FileChooser welcher entweder den Ordner ( also die darin enthaltenen Dateien ) oder ein einzelnes File übergeben soll.


Hoffe das mein Problem halbwegs verständlich ist :/


Danke schon mal :)
 
Da gibt's viele verschiedene Möglichkeiten .

Du könntest dir z.B. Eine tupel klasse erstellen, die typ und Wert beinhaltet.
Oder du lässt die Methode ein object zurückgeben und arbeitest dann mit instanceof und Casting (Google It!)
 
Gib immer ein Array zurück. Bei einem File steht eben nur ein File drin, bei einem Ordner schreibst du alle Files rein.

Was soll eigentlich passieren, wenn der Ordner wieder Ordner enthält?
 
z.B.

oben
Code:
String[] files = pfadAuswahl2();
for (String f : files){
	oFlaeche.model.addElement(f);
}

unten
Code:
public String[] pfadAuswahl2() {
	JFileChooser fileChooser = new JFileChooser(); // erzeugt ein
													// JFileChooser Objekt
	fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
	// setzt den selektionsmodus auf Dateien und Ordner
	int result = fileChooser.showOpenDialog(fileChooser); 
	// setzt eine int variable wenn der OK-Button gedrückt wurde im FileChooser
	if (result == JFileChooser.APPROVE_OPTION) { 
	// überprüft ob "ok" gedrückt worden ist,denn Aprove Option ( s. zeile drunter )
	// gibt einen Wert zurück der gleich dem wert ist der result ist.
		File selectedFile = fileChooser.getSelectedFile(); 
	// nimmt das aktuelle File

		if (selectedFile.isDirectory()) { 
//  ausgewählte Datei ein Ordner ( Directory ) ist.
			File[] filesInDir = selectedFile.listFiles();
			if (filesInDir != null) {
				String[] sFiles = new String[filesInDir.length];
				for (int i = 0; i < filesInDir.length; i++) {
					sFiles[i] = filesInDir[i].getAbsolutePath();

				}
				return sFiles;
			}
		} else {
			return new String[]{selectedFile.getAbsolutePath()}; 
// Rückgabewert des Filechoosers ( wenns kein Ordner ist )
		}
	}
	return null;
}
 
Im 2ten Teil Zeile 16:
return filesInDir.getAbsolutePath()
wird ja dann nur i=0 also das erste Element zurückgegeben, da du ja direkt ein return hast.

Arbeite doch mit Listen, Ordner bzw mehr Files sind Listen mit Länge>1 und Files sind eben einelementige Listen.
 
wahli schrieb:
Gib immer ein Array zurück. Bei einem File steht eben nur ein File drin, bei einem Ordner schreibst du alle Files rein.

Das könnte ich mal probieren .. allerdings sehe ich jetzt schon n paar Probleme, aber ich schau mal .. vielleicht täusche ich mich auch..

wahli schrieb:
Was soll eigentlich passieren, wenn der Ordner wieder Ordner enthält?.

dazu werde ich noch eine Methode schreiben.. aber das is dann nicht das Problem wenn ich das so erstmal gelöst habe... ^^
 
Jetzt muss ich nochmals (vielleicht) blöd nachfragen: wolltest du nicht ein Backup-Programm machen? Bitte erkläre kurz, wie es funktionieren soll.
Ergänzung ()

Sasku schrieb:
dazu werde ich noch eine Methode schreiben.. aber das is dann nicht das Problem wenn ich das so erstmal gelöst habe... ^^

Such mal nach "rekursive Methode"
 
das Backup Programm funktioniert folgendermaßen:

der user wählt die zu sichernden Dateien aus und diese werden in eine liste geschrieben .. danach werden, wenn der speicherbutton gedrückt wird, die Dateien genommen und alle in ein zip file gespeichert. so im Prinzip soll es funktionieren.

Ansich ist das Programm fertig .. es wurde mir nur noch aufgetragen dass ich die Funktion einbauen soll ganze Ordner zu sichern .. weil man sonst, falls es viele Dateien in dem Ordner sind, sehr sehr viel Klickarbeit wäre.
 
Zurück
Oben