Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5

JAVA-PROJEKT
#1

Guten Morgen Leute,ich suche jemanden der sich mit Java auskennt ich arbeite derzeit an einem kleinem Projekt,es heißt "CloudCleaner".Ich habe nämlich mehrere freigegebene Ordner in meiner Dropbox ,ab und zu erlaubt sich ein Scherzkecks die Dropbox voll zu spamen und ich bin derjenige der den ganzen Mist beseitigen muss,deshalb das Programm.So ich habe nun eine Datenbank angelegt wo alle Ordner und Dateien gelistet sind die kein SPAM sind.Das Programm liest also alle Dateien die in der Dropbox sind und speichert sie in einer Liste.Nun durchlaufe ich die Liste und suche nach Dateien und Ordnern die in der Datenbank eingetragen sind,wenn eine Datei gefunden wird die in der Datenbank ist,wird sie aus der Liste gelöscht,nachdem alle in der Datenbank enthaltenen Dateien aus der Liste entfernt(Liste<File>.remove(x)) wurden lösche(Liste<File>.get(x).delete) ich alle Dateien die noch in der Liste enthalten sind aus der Dropbox und entferne sie anschließend aus der Liste.Es funktioniert alles wunderbar nur leider tut sich mein Programm schwer mit Dateien,die Sonderzeichen im Namen haben.Ich suche schon seit Tagen nach einer Lösung wie das Programm die Sonderzeichen richtig einlesen kann.Ich habe versucht den Pfad der zur löschenden Datei auszulesen und ihm die richtige Zeichenkodierung zu geben damit er die Datei ohne Probleme löschen kann.
Ich habe schon sehr viele Codierungen probiert:
MacCentralEurope,MacSymbol,UTF-16,UTF-8,ASCII .
Leider funktioniert es immer noch nicht.
Ich wäre demjenigen sehr dankbar der mir hilft eine Lösung zu finden.
Zitieren
#2

Verstehe ich das richtig, dass du einfach eine Liste durchgehst, dann die Dateien auf der Dropbox scannst und alle die nicht in der Liste sind löschst?

Um was für Sonderzeichen handelt es sich?
Und hast du bei deinen Ordnern/Dateien auch solche mit Sonderzeichen? Falls nicht, kannst du ja einfach schauen, ob eine Datei Sonderzeichen enthält. Falls ja, löschst du sie einfach.
Zitieren
#3

Naja die Liste beinhaltet alle Dateien die momentan in der Dropbox sind.
Die Datenbank enthält alle Namen der Dateien die nicht gelöscht werden sollen.
Also nicht wirklich Sonderzeichen sondern Umlaute wie ä,ü,ö.
Ich kann eben Dateien die Sonderzeichen enthalten nicht löschen da statt den Sonderzeichen "?" angezeigt werden und somit ein anderer Dateiname entsteht,somit kann die Datei nicht gefunden werden.
Zitieren
#4

Ich werde morgen mir nochmals darüber Gedanken machen. Smiley
In der Zwischenzeit kannst du mal das versuchen.
Code:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(DeinString);
boolean b = m.find();

if (b)
   System.out.println("Sonderzeichen enthalten. Delete that ****");
Zitieren
#5

So sieht der falsch eingelesene Name der Datei aus
[Bild: 94416927579482475956_thumb.jpg]

Ok,danke für deine Hilfe Smiley
Zitieren
#6

Für morgen Smiley
So hätte ich es gelöst wenn es funktionieren würde
[Bild: 47993870140493361467_thumb.jpg]
Zitieren
#7

So ich habe das Problem gelöst statt einer Liste verwende ich jetzt einen DirectoryStream der die Sonderzeichen ohne Probleme einliest,mir ist keine andere Möglichkeit eingefallen wie Java sonst die Sonderzeichen lesen könnte.Ich habe jetzt nur noch ein Problem und zwar kann ich keine Ordner mit Inhalt löschen.
Zitieren
#8

Kannst du nicht einfach sagen, dass er die Ordner mit Unter-Directories löschen soll?
Zitieren
#9

Ich wüsste nicht wie die Klasse Files oder File bietet keine entsprechende Methode.
Zitieren
#10

http://www.java2s.com/Tutorial/Java/0180...ntents.htm
Schau dir das mal an. Vielleicht hilfts. Kanns gerade selber nicht testen.
Zitieren
#11

@R0uter ein Teil habe ich von der Seite entnommen,leider funktioniert die Methode zurzeit nur teilweise:
Code:
private void deleteSubDir(File file)
      {
          Iterator<Path>pfad=null;
          LinkedList<Path>liste=new LinkedList<Path>();
          try{
            DirectoryStream<Path>pfadleser=Files.newDirectoryStream(file.toPath());
            pfad=pfadleser.iterator();
            while(pfad.hasNext())
            {
                liste.add(pfad.next());
            }
            for(int i=0;i<liste.size();i++)
            {
                if(liste.get(i).toFile().isDirectory()&&isEmpty(liste.get(i).toFile())||liste.get(i).toFile().isFile())
                {
                    Files.delete(liste.get(i));
                }
                if(liste.get(i).toFile().isDirectory()&&!isEmpty(liste.get(i).toFile()))
                {
                   deleteSubDir(liste.get(i).toFile());
                }
                
            }
          }
          catch(IOException k)
          {
              
          }
      }
        private boolean isEmpty(File file)
        {
            if(file.listFiles().length>0)
            {
                return false;
            }
            return true;
        }
Zitieren
#12

So ich habe jetzt die Hilfsmethode geschrieben die eigentlich gut funktioniert und alle Unterordner löscht ,aber leider kann die Methode keine Unterordner mit Sonderzeichen löschen :/ .
Code:
private boolean isEmpty(File file) {
        if (file.listFiles() != null) {
            return false;
        }
        if (file.listFiles() == null) {
            return true;
        }
        return false;
    }
    private void delFile(File file) {
        Path tmp = null;
        Iterator<Path> it = null;
        try {
            it = Files.newDirectoryStream(file.toPath()).iterator();
            for (int i = 0; file.exists(); i++) {
                tmp = it.next();
                if (tmp.toFile().isFile()) {
                    tmp.toFile().delete();
                }
                if (!isEmpty(tmp.toFile())) {
                    delFile(tmp.toFile());
                }

            }

        } catch (NoSuchElementException k) {

            file.delete();

        } catch (IOException l) {
            System.err.println("Es ist ein Fehler beim löschen aufgetreten");
        }
    }
Zitieren
#13

Mann, diese Sonderzeichen. Biggrin
Zitieren
#14

Es liegt an der File,bzw. an der Files Klasse,die liest die Namen der Dateien irgendwie ein Biggrin .
Zitieren


Möglicherweise verwandte Themen…
Thema / Verfasser Antworten Ansichten Letzter Beitrag



Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste