Ordner auflisten

pepito84

Grünschnabel
Hiho Community!

Ich bin neu hier und hoffe gleich zu Anfang das ich meinen Thread in den richtigen Unterordner poste! ;)

Ich probiere momentan das Auslesen der Verzeichnisstruktur aus und bin da auf ein kleines Problem gestoßen.
Das Programm das ich geschrieben habe, soll mir nur ermöglichen durch die Struktur vorwärts und rückwärts zu navigieren (unter Windows). Macht es soweit auch super! Mein Problem ist, das wenn ich während des laufenden Programmes c:\programme auswähle, dass ich dort kein Unterordner/Files angezeigt bekomme! Aber ich frage mich warum!? ^^
Hier der Code:
Tree:
Code:
package verzeichnisse;
import java.io.File;
import java.util.*;
import javax.swing.table.*;


/**
 *
 * @author pepito84
 */
public class Tree extends javax.swing.JFrame {
Vector rootDirectories;
Vector rootFiles;
String[] initDrive = {"c:/", "d:/", "e:/","f:/","g:/","h:/","i:/","j:/","k:/","l:/","m:/","n:/","o:/","p:/","q:/","r:/","s:/","t:/","u:/","v:/","w:/","x:/","y:/","z:/"};
String dr = "c:/";
String path;
Laufwerk l;
int geladen = 0;
File drive;
String buffer;
int driveTest = 0;

    /** Creates new form Tree */
    public Tree() {
        initComponents();
        init();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        tblTree = new javax.swing.JTable();
        cboDrive = new javax.swing.JComboBox();
        jScrollPane2 = new javax.swing.JScrollPane();
        tblFile = new javax.swing.JTable();
        cmdRoot = new javax.swing.JButton();
        cmdBack = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        tblTree.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nr", "Ordner"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblTree.setCellSelectionEnabled(false);
        tblTree.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblTreeMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tblTree);
        tblTree.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);

        cboDrive.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cboDriveItemStateChanged(evt);
            }
        });

        tblFile.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Dateien"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblFile.setColumnSelectionAllowed(true);
        tblFile.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tblFileMouseClicked(evt);
            }
        });
        jScrollPane2.setViewportView(tblFile);
        tblFile.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);

        cmdRoot.setText("root");
        cmdRoot.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdRootActionPerformed(evt);
            }
        });

        cmdBack.setText("zurück");
        cmdBack.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdBackActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(4, 4, 4)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 454, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(cboDrive, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(cmdRoot)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cmdBack)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cboDrive, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmdRoot)
                    .addComponent(cmdBack))
                .addGap(20, 20, 20)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jScrollPane2)
                    .addComponent(jScrollPane1)))
        );

        pack();
    }// </editor-fold>                        

    private void cboDriveItemStateChanged(java.awt.event.ItemEvent evt) {                                          
      if( geladen!= 0){
          geladen=0;
          dr = String.valueOf(cboDrive.getSelectedItem());
          init();
      }
    }                                         

    private void tblTreeMouseClicked(java.awt.event.MouseEvent evt) {                                     
       
       int pos = tblTree.getSelectedRow();
       Unterordner u = (Unterordner) rootDirectories.elementAt(pos);
       dr = u.getPath()+"\\";
      
       geladen = 0;
       init();
    }                                    

    private void tblFileMouseClicked(java.awt.event.MouseEvent evt) {                                     
       int pos = tblFile.getSelectedRow();
        ContainedFiles fi = (ContainedFiles) rootFiles.elementAt(pos);
        path = fi.getPath();
        fi.execFile(path);
    }                                    

    private void cmdRootActionPerformed(java.awt.event.ActionEvent evt) {                                        
        dr = cboDrive.getSelectedItem().toString();
        geladen = 0;
        init();
    }                                       

    private void cmdBackActionPerformed(java.awt.event.ActionEvent evt) {                                        
      try{
      dr = drive.getParentFile().toString();
      }catch(Exception e){
          
      }
      geladen = 0;
      init();
    }                                       

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Tree().setVisible(true);
            }
        });
    }
  public void init(){
        ( (DefaultTableModel) tblTree.getModel() ).setNumRows(0);
        ( (DefaultTableModel) tblFile.getModel() ).setNumRows(0);
        
       if(cboDrive.getItemCount() == 0)
         initDrives();
       cboDrive.setSelectedItem(dr);
       drive = new File(dr);
       l = new Laufwerk(drive);
       try{
        fillTree();
       }catch(Exception e){
           System.out.println(e);
       }
      
       
        geladen=1;

   }


  public void initDrives(){
       for( int i = 0; i < initDrive.length; i++){
          File testDrive = new File(initDrive[i]);
          if( testDrive.exists() )
              cboDrive.addItem(testDrive.getAbsolutePath());
      }
         
}
public void fillTree(){
 
  rootDirectories = l.getOrdner();
  rootFiles = l.getFile();
  for(int i = 0; i < rootDirectories.size(); i++){
          Unterordner u = (Unterordner) rootDirectories.elementAt(i);
          buffer = u.getName();
          Object Row[] = { i+1 , buffer};
      ( (DefaultTableModel) tblTree.getModel() ).addRow(Row);
  }
  for(int i = 0; i < rootFiles.size(); i++){

       ContainedFiles fi = (ContainedFiles) rootFiles.elementAt(i);
       buffer = fi.getName();
       Object Row[] = { buffer};
      ( (DefaultTableModel) tblFile.getModel() ).addRow(Row);
  }

}


    // Variables declaration - do not modify                     
    private javax.swing.JComboBox cboDrive;
    private javax.swing.JButton cmdBack;
    private javax.swing.JButton cmdRoot;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable tblFile;
    private javax.swing.JTable tblTree;
    // End of variables declaration                   

}
Laufwerk: (wird für jeden ausgewählten Ordner hergenommen)
Code:
package verzeichnisse;

import java.io.File;
import java.util.Vector;

/**
 *
 * @author pepito84
 */
public class Laufwerk {
String[] inhalt;
Vector Ordner = new Vector();
Vector File = new Vector();
File laufwerk;



public Laufwerk(File pDrive){
    laufwerk = pDrive;
    this.ladeStruktur(laufwerk);

}

public void ladeStruktur(File pLaufwerk){
   
       
        inhalt = pLaufwerk.list();
        
  try{
    for(int i = 0; i<inhalt.length;i++){
     File f = new File(""+laufwerk.getAbsolutePath()+"/"+inhalt[i]+"/");
     String root = laufwerk.getPath();
     String path = f.getAbsolutePath();
      if( inhalt[i].contains(".") ){
        
          ContainedFiles cf= new ContainedFiles(f.getName(),path);
        einordnenFile(cf);
      }else{
        
         Unterordner o = new Unterordner(f.getName(),path);
         einordnenDir(o);
      }
    }
  }catch(Exception e){
      
  }


   }
public Vector getOrdner(){
    
    return Ordner;
}

public Vector getFile(){

    return File;
}

    public void einordnenFile(ContainedFiles pCf) {
        
        File.addElement(pCf);
       
             
    }

    public void einordnenDir(Unterordner pOrdner) {
         Ordner.addElement(pOrdner);
         
    }
    public void toStringOrdner(Laufwerk pLauf){
       
    }

    public void toStringFile(Laufwerk pLauf){
        
    }

}
Unterordner
Code:
package verzeichnisse;

/**
 *
 * @author pepito84
 */
public class Unterordner{
 String Name;
 String Path;
  
  
  
    public Unterordner(String Name,String Path){
        this.Name = Name;
        this.Path = Path;
   }

  public String getName(){
      return this.Name;
  }
  public String getPath(){
      return this.Path;
  }

    
}
File
Code:
package verzeichnisse;

import java.io.IOException;

/**
 *
 * @author pepito84
 */
public class ContainedFiles {
  String Name;
  String Path;
  

    public ContainedFiles(String Name,String Path){
        this.Name = Name;
        this.Path = Path;


    }

  public String getName(){
      return this.Name;
  }

  public String getPath(){
      return this.Path;
  }

  public void execFile(String path){
   try {
	new ProcessBuilder( "cmd", "/c", path ).start();
} catch (IOException e) {
	e.printStackTrace();}
}
}
 
Zuletzt bearbeitet:
Das muss aber an dir liegen. Bei mir funktioniert es einwandfrei.

bbzeuy3922nfwf8c2.png
 
Hat das evtl etwas mit berechtigungen zu tun?
Vista und Windows 7 haben es nicht gerne wenn man unter C: im Windows oder Programme ordner rumwerkelt.
 
Hmm.. an das hab ich noch gar nicht.. gedacht.. das die Berechtigungen ned richtig gesetzt sind! Aber komischer weise kann ich nur c:\programme nicht auslesen. ^^ Den Windows ordner selbst schon. Naja.. da werd ich mich noch etwas spielen! Vielen Dank!

Aber wisst ihr was ich mich noch gefragt habe?

Ich frage ja ab.. ob file oder nicht so ab :
Code:
    for(int i = 0; i<inhalt.length;i++){
     File f = new File(""+laufwerk.getAbsolutePath()+"/"+inhalt[i]+"/");
     String root = laufwerk.getPath();
     String path = f.getAbsolutePath();
      if( inhalt[i].contains(".") ){
        
          ContainedFiles cf= new ContainedFiles(f.getName(),path);
        einordnenFile(cf);
      }else{
        
         Unterordner o = new Unterordner(f.getName(),path);
         einordnenDir(o);
      }
    }
  }catch(Exception e){
      
  }

Wenn ich aber versuche das über fi.isFile() zu machen... wird alles zum Ordner?
Iwas habe ich da nicht richtig verstanden! ^^
Könnt ihr mir da nen Tipp geben? oder is das nur Vista-Problem?

Vielen Dank schon mal!

Mfg
pepito
 
Hallo,

schau doch ob die "File" ein Ordner ist mit f.isDirectory();.

Zu dem Problem mit dem Programme Ordner hätt ich noch eine andere Idee:
Unter Vista gibt es keinen "Programme"-Ordner mehr. Der Ordner heißt jetzt
"Programm files", meine ich. In der deutschsprachigen Version von Vista wird der
"Prgramm files"-Ordner umgemapped in "Programme". Hier könnte evtl. ein Fehler entstehen.
Ist nur eine Idee, wenn ich zuhause bin kann ich es auch mal testen.

Gruß,
swas
 
So... ich habs nochmal getestet und tatsächlich! Aufgrund meiner Sturheit habe ich übersehen das C:\programme und c:\progam files das gleiche ist.. und somit funktioniert es wunderbar! ^^ Ich schau dann nur noch das die auflistung von c:\programme gefiltert wird.

Zu dem isDirectory/isFile.. das habe ich schon probiert... is Directory is gar kein problem... er ordnet alles wunderbar als ordner ein! Genau hier ist das problem.. es ordnet ALLES als Ordner ein und nichts als Datei. Seltsam oder?

mfg

pepito
 
Hallo,

in Java sind Ordner und Dateien das selbe, beides sind einfach nur Dateien ich hoffe du weißt das.
Ich weiß jetzt nich genau was dein inhalt-Array ist aber ich vermute einfach mal, dass es ein String-Array ist und die Namen der Dateien in einem Ordner enthält.
So wie du es machst kann man es zwar auch machen, aber ich denke so ist es einfacher:

Java:
import java.io.File;


public class FileTest {
    
    public FileTest() {
        File file = new File("C:/");
        File[] liste = file.listFiles();
        
        for (int i = 0; i < liste.length; i++) {
            if (liste[i].isFile()) {
                System.out.println("Datei: " + liste[i]);
            } else {
                System.out.println("Ordner: " + liste[i]);
            }
        }
        
    }

    public static void main(String[] args) {
        new FileTest();
    }

}
Gruß,
swas
 
Zuletzt bearbeitet:
Hallo!
Dateien / Ordner filtern geht noch einfacher indem man direkt die Filtermöglichkeit von list bzw. listFiles benützt:
Java:
String[] dirs = entries.list( new FilenameFilter() {
  public boolean accept( File d, String name ) {
    return d.isDir();
  } } );
Quelle: Java ist auch eine Insel
 
Zuletzt bearbeitet von einem Moderator:
Hallo!
Dateien / Ordner filtern geht noch einfacher indem man direkt die Filtermöglichkeit von list bzw. listFiles benützt:
Java:
String[] dirs = entries.list( new FilenameFilter() {
  public boolean accept( File d, String name ) {
    return d.isDir();
  } } );
Quelle: Java ist auch eine Insel

Servus!

Erstmal sorry für die verspätete Weiterführung! Aber war in letzter Zeit etwas stressig.
Also.. ich hab das mit diesem FilnameFilter getestet.. und irgendwie.. funktioniertert das überhaupt nicht! ;) Mit dir.isDirectory() passiert das selbe wie ich es bereits ausprobiert habe. ;( Deshalb habe ich die Methode von swas ausprobiert und diese funktioniert einwandfrei! ;)

Java:
 public void ladeStruktur(){
   
            
         File[] list =  laufwerk.listFiles();

         for (int i = 0; i < list.length; i++) {
           String path = list[i].getAbsolutePath();
            if (list[i].isFile()) {
                
                ContainedFiles cf = new ContainedFiles(list[i].getName(),path);
                einordnenFile(cf);
            } else {

                 Unterordner o = new Unterordner(list[i].getName(),path);
                  einordnenDir(o);
            }
        }

    
}
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück