Announcement

Collapse
No announcement yet.

verzeichnis ausgeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • verzeichnis ausgeben

    hallo,

    ich möchte gerne ein ein jsp-dokument schreiben, welches mir ein bestimmtes verzeichnis als linkliste ausgibt. ich habe alle meine bücher gewälzt, bin aber nicht fündig geworden. ich würde gerne eine taglib schreiben, die das übernimmt, wüsste zuvor aber gerne, wie ich an die daten rankomme. im standalonebereich kann ich ja File aus der java.util nehmen und komm so an dateien ran. ich brauche hier jedoch die urls. ich habe etwa folgende dateistruktur:

    webapps
    - WEB-INF
    - index.jspx
    - files
    ---verzeichnis
    ---file1
    ---file2
    ---file3

    ich möchte quasi eine liste von links haben, die mir zugriff auf die daten in ./files geben. also soll am ende soetwas da stehen, wie <a href=".files/file1">file1</a>
    bei dem verzeichnis möchte ich eine neue seite laden, auf welcher dann das unterverzeichnis angezeigt wird. mir würdee jedoch schon reichen, wenn ich wüsste, wie ich an die relativen urls rankäme, um einen entsprechenden link erzeugen zu können.

    kann mir da jemand weiterhelfen?

    liebe grüße schorsch

  • #2
    Rekursive Suche nach Dateien

    Code:
    package ghelper;
    import java.io.File;
    import java.io.FilenameFilter;
    import java.util.ArrayList;
    /**
     *Klasse zum suchen nach Files
     * @author Chris
     */
    public class GFileSearch
    {
    private String path;
    private ArrayList<String> ext=new ArrayList<String>();
    private boolean unterverzeichnisse;
    private boolean directorys;
    private ArrayList<File> ergebnisListe=new ArrayList<File>();
    public GFileSearch()
        {
        ext.clear();
        ext.add(".*\\..*");
        directorys=false;
        unterverzeichnisse=false;
        ergebnisListe.clear();
        }
    /**
     * 
     * @return Liste der gefundenen Dateien/Ordner
     */
    public ArrayList<File> getErgebnisListe()
        {
        return ergebnisListe;
        }
    /**
     * 
     * @return Ob Ordner mit in die Ergebnisliste aufgenommen werden sollen
     */
    public boolean isDirectorys()
        {
        return directorys;
        }
    /**
     * 
     * @param directorys Ob Ordner mit in die Ergebnisliste aufgenommen werden sollen
     */
    public void setDirectorys(boolean directorys)
        {
        this.directorys=directorys;
        }
    /**
     * 
     * @return Ob Unterverzeichnisse mit durchsucht werden sollen
     */
    public boolean isUnterverzeichnisse()
        {
        return unterverzeichnisse;
        }
    /**
     * 
     * @param unterverzeichnisse Unterverzeichnisse mit durchsucht werden sollen
     */
    public void setUnterverzeichnisse(boolean unterverzeichnisse)
        {
        this.unterverzeichnisse=unterverzeichnisse;
        }
    /**
     * 
     * @return Liste der Extension nach denen gesucht wird
     */
    public String getExt()
        {
        return ext.toString();
        }
    /**
     * 
     * @param ext Setzt eine Extension an der geucht werden soll
     */
    public void setExt(String ext)
        {
        this.ext.clear();
        ext=ext.replaceAll("\\.","\\\\.");
        ext=ext.replaceAll("\\?",".");
        ext=ext.replace("*",".*");
        this.ext.add(ext);
        }
    /**
     * 
     * @param value Setzt die Liste der Extension nach denen gesucht wird um mehrere Werte die in einem String durch Komma getrennt sind
     */
    public void setExtMulti(String value)
        {
        this.ext.clear();
        String ele[]=value.split(",");
        for(int i=0;i<ele.length;i++)
            {
            ele[i]=ele[i].replaceAll("\\.","\\\\.");
            ele[i]=ele[i].replaceAll("\\?",".");
            ele[i]=ele[i].replace("*",".*");
            this.ext.add(ele[i]);
            }
        }
    /**
     * 
     * @param ext Ergänzt die Liste der Extension nach denen gesucht wird um einen Wert
     */
    public void addExt(String ext)
        {
        ext=ext.replaceAll("\\.","\\\\.");
        ext=ext.replaceAll("\\?",".");
        ext=ext.replace("*",".*");
        this.ext.add(ext);
        }
    /**
     * 
     * @return Suchpfad in dem die Suche startet
     */
    public String getPath()
        {
        return path;
        }
    /**
     * 
     * @param path Suchpfad in dem die Suche startet
     */
    public void setPath(String path)
        {
        this.path=path;
        }
    /**
     * Startet die Suche
     */
    public void search()
        {
        if(path.isEmpty())
            {
            return;
            }
        rekursiveSuche(path);
        }
    private void rekursiveSuche(String path)
        {
        File f=new File(path);
        FilenameFilter filter=new FilenameFilter()
        {
        public boolean accept(File dir,String name)
            {
            File ftest=new File(dir.getAbsolutePath()+"\\"+name);
            if(ftest.isDirectory())
                {
                return true;
                }
            for(int i=0;i<ext.size();i++)
                {
                if(name.matches(ext.get(i)))
                    {
                    return true;
                    }
                }
            return false;
            }
        };
        File[] erg=f.listFiles(filter);
        if(erg==null)
            {
            return;
            }
        for(int i=0;i<erg.length;i++)
            {
            if(erg[i].isDirectory()&&directorys)
                {
                ergebnisListe.add(erg[i]);
                }
            else
                {
                if(!erg[i].isDirectory())
                    {
                    ergebnisListe.add(erg[i]);
                    }
                }
            if(erg[i].isDirectory()&&unterverzeichnisse)
                {
                rekursiveSuche(erg[i].getAbsolutePath());
                }
            }
        }
    }
    Christian

    Comment


    • #3
      ähm ich benötige kein filesearch, sondern ein urlsearch. ich hab mittlerweile auch gefunden, womit man da ran kommt, aber ich weiß nicht, wie ich das ner bean oder taglib übergeben kann.

      getResourcePaths("/dir")

      damit bekommt man in einem scriplet ein set von dateien in /dir.

      Hier das, was ich habe

      JSP
      HTML Code:
                  <jsp:scriptlet>
                      Set set = application.getResourcePaths("/files");
                      Iterator it = set.iterator();
                      String s = "";
                      while (it.hasNext()) {
                          s="."+it.next().toString();
                  </jsp:scriptlet>
                  <jsp:element name="p">
                      <jsp:element name="a">
                          <jsp:attribute name="href">
                              <jsp:scriptlet>
                                  out.println(s);
                              </jsp:scriptlet>
                          </jsp:attribute>
                          <jsp:scriptlet>
                              out.println(s);
                          </jsp:scriptlet>
                      </jsp:element>
                  </jsp:element>
                  <jsp:scriptlet>
                      }
                  </jsp:scriptlet>
      Ausgabe
      HTML Code:
      <p><a href="./files/text02.txt
      ">./files/text02.txt
      </a></p><p><a href="./files/folder01/
      ">./files/folder01/
      </a></p><p><a href="./files/text03.txt
      ">./files/text03.txt
      </a></p><p><a href="./files/text01.txt
      ">./files/text01.txt
      </a></p><p><a href="./files/folder02/
      ">./files/folder02/
      </a></p>

      Comment


      • #4
        wenn du meinst....

        Du hättst die Dateien suchen können und dann in einen relativen Pfad umwandeln...
        Christian

        Comment


        • #5
          Es geht auch ohne Programmierung...
          In den Verzeichnissen eine .htaccess Datei mit
          Options +Indexes
          anlegen. Und schon wird das Directory angezeigt, wenn du einen Link auf das VErzeichnis setzt.

          Voraussgesetzt, du nutzt einen Apache und hast das Recht eine .htaccess an beliebiger Stelle anzulegen
          Christian

          Comment

          Working...
          X