Hallo,
hab ein kleines Programm geschrieben das den Inhalt eines beliebigen Verzeichnisses auflistet.
Hab dabei aber ein paar kleine Probleme:
- f.length() zeigt immer 0 an, auch wenn die Files laut explorer grösser sind
- f.isDirectory() sagt immer true, auch bei z.B. autoexec.bat
- f.lastModified() hier passt die Formatierung zwar nicht, wie macht man das wohl richtig, aber es wird immer der gleiche Wert ausgegeben.
Hier mein Code, hat da zufällig jemand eine Idee?
Code:
import java.io.*;
import java.text.*;
//import IOTools.*;
import java.util.Scanner;
public class DirListing {
public static void main (String args[]){
System.out.print("Verzeichnis eingeben: ");
Scanner eingabe = new Scanner(System.in);
String auswahl = eingabe.next();
File f = new File (auswahl);
//String filenames[] = f.list ();
final String []filenames = f.list();
// String filenames[] = f.list();
if (filenames != null) {
DecimalFormat dformat = new DecimalFormat("0000");
for (int i = 0; i < filenames.length; i++)
//System.out.println (dformat.format(i)+" " + filenames[i]);
System.out.println(f.getPath()+ filenames[i]+" "+ f.length() + " "
+f.isDirectory()+" "+f.lastModified());
}
}
}
Du gibst ein Verzeichnis ein welches du anzeigen willst, das speicherst du in f. Dann listest du den Inhalt auf (list() und speicherst es im Array). Dann solltest du in der Schleife auch jeweils auf das Element im Array zugreifen.
Ich würd an deiner Stelle File#listFiles verwenden, und dann von files[.i] jeweils eben absolutePath, length, isDirectory und lastModified von files[.i] ausgeben.
:edit: Lol... denk dir die Punkte aus den [.i] weg... sonst wird alles danach kursiv
hatte ich auch ... lag am falschen Pfad des neuen FileObjektes
du legst Files an die es noch ned gibt, die Namen hat er weil du sie im Konstruktor übergibst , aber sonst eben nix darum größe null und Datum bei mr immer 1970 irgendwas
du musst vor den namen im File Konstruktor den korrekten pfad angeben (siehe z.B: Zeile 94)
greetz
hier meine Version
Code:
import java.io.*;
import java.text.SimpleDateFormat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
public class blatt05_b extends JFrame implements ActionListener {
JButton go, raus;
JTextField tf;
JLabel lab;
JTable tab;
JPanel pan;
File f; // ANZUZEIGENDER ORDNER
TableModel tmod;
public blatt05_b () {
super ("Ordner Eigenschaften");
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container c = getContentPane();
pan = new JPanel();
tf = new JTextField(20);
go = new JButton("Go");
raus = new JButton ("Zurück");
raus.setEnabled(false);
lab = new JLabel("Bitte Pfad eingeben");
go.addActionListener(this);
raus.addActionListener(this);
tab = new JTable();
JScrollPane scroll = new JScrollPane (tab);
pan.add(lab);
pan.add(tf);
pan.add(go);
pan.add(raus);
c.add("North", pan);
c.add("Center", scroll);
tab.addMouseListener (new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
reinDa();
};
});
setSize(800,500);
setVisible(true);
}
public void actionPerformed (ActionEvent e) {
if (e.getSource() == go) {
try {
f = new File(tf.getText()); // ORDNER //grml wirft um verrecken keine Exception :X
tab.setModel(tmod = machModel()); // mach model nutze dazu das Verzeichnis f
lab.setText(tf.getText());
pan.doLayout();
}
catch (Exception ex) { lab.setText(ex.toString());
System.err.println(ex);}
}
else if (e.getSource() == raus) {
String drueber = f.getParent();
if (drueber == null) {
raus.setEnabled(false); //wer fehler veursachen will wird daran gehindert :p
}
else {
f = new File (drueber);
tab.setModel(tmod = machModel()); //mach model nutze dazu das Verzeichnis f
tf.setText(drueber);
lab.setText(drueber);
pan.doLayout();
}
}
}
public TableModel machModel () {
TableModel tmodel = null;;
// String []dateiNamen = null; // lol final ein MUSS ?! MANN wasn dreck
if (f.exists()) {
if (f.isDirectory()) {
final String []dateiNamen = f.list(); // WIESO FINAL ???
if (dateiNamen != null ) { // assi Struktur aber egal...
tmodel = new AbstractTableModel () {
// PFLICHT
public int getColumnCount() {
return 5;
}
public Object getValueAt(int row, int column) {
File datei = new File(tf.getText()+"\\"+dateiNamen[row]);
switch(column) {
case 0: return datei.getName();
case 1: return new Double(datei.length()/1024.0); // GEIL
case 2: return "TYP?";
case 3: {
SimpleDateFormat formatierer = new SimpleDateFormat ("HH:mm:ss dd.MM.yyyy");
return formatierer.format(new java.util.Date (datei.lastModified ()));
}
case 4: return new Boolean(datei.isDirectory());
default: return "Fehler";
}
}
public int getRowCount() {
return dateiNamen.length;
}
// FREIWILLIG:
public String getColumnName(int column) {
switch(column) {
case 0: return "Name";
case 1: return "Größe in KB";
case 2: return "Typ";
case 3: return "Zuletzt geändert";
case 4: return "Ist ein Ordner?";
default: return "Fehler";
}
}
public Class getColumnClass (int c) {
return getValueAt(0,c).getClass();
}
};
}
}
}
else lab.setText("Da stimt was ned mit Ihrer Eingabe !");
return tmodel;
}
public void reinDa () {
int row = tab.getSelectedRow();
if (((Boolean)tmod.getValueAt(row,4)).booleanValue()){ //ist das ausgewählt ein Ordner?
String neuerOrdner = f.getAbsolutePath()+"\\"+tmod.getValueAt(row,0);//Name des ankeklickten Ordners
f = new File(neuerOrdner);
tf.setText(neuerOrdner);
tab.setModel(tmod = machModel()); //mach model nutze dazu das Verzeichnis f
lab.setText(neuerOrdner);
raus.setEnabled(true);
}
}
public static void main(String[] args) {
new blatt05_b();
}
}