|
|
|
![]() |
|
Strumenti |
![]() |
#81 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Domani posto la versione iterativa che è molto più veloce della versione ricorsiva. E allora sarete definitivamente spacciati.
Se qualcuno fosse interessato ai sorgenti, può averli contattandomi in pvt. ![]() Ciao. |
![]() |
![]() |
![]() |
#82 | ||
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
#83 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Sono riuscito a ridurre i tempi della versione Java:
![]() Codice:
/* * http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/Find.java. */ import java.io.*; import java.nio.file.*; import java.nio.file.attribute.*; import static java.nio.file.FileVisitResult.*; import static java.nio.file.FileVisitOption.*; import java.util.*; public class Find { public static class Finder extends SimpleFileVisitor<Path> { //private final PathMatcher matcher; //private int numMatches = 0; private int numHidden = 0; private int numOther = 0; //Finder(String pattern) { // matcher = FileSystems.getDefault() // .getPathMatcher("glob:" + pattern); //} // Compares the glob pattern against // the file or directory name. void find(Path file) { Path name = file.getFileName(); try { if (name != null /*&& matcher.matches(name)*/ ) { DosFileAttributes attr = Files.readAttributes(file, DosFileAttributes.class); if ( attr.isHidden() ) numHidden++; else numOther++; //numMatches++; //System.out.println(file); } } catch (UnsupportedOperationException x) { System.err.println("DOS file" + " attributes not supported:" + x); } catch(IOException io) { System.out.println("IOException" + io.getMessage()); } } // Prints the total number of // matches to standard out. void done() { System.out.println("Hidden : " + numHidden); System.out.println("Other : " + numOther); System.out.println("Matched: " + (numHidden + numOther)); } // Invoke the pattern matching // method on each file. @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { find(file); return CONTINUE; } // Invoke the pattern matching // method on each directory. @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { find(dir); return CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) { System.err.println(exc); return CONTINUE; } } static void usage() { System.err.println("java Find <path>"); System.exit(-1); } public static void main(String[] args) throws IOException { if (args.length < 1) usage(); Path startingDir = Paths.get(args[0]); //String pattern = "*.*"; //Finder finder = new Finder(pattern); Finder finder = new Finder(); Files.walkFileTree(startingDir, finder); finder.done(); } } |
![]() |
![]() |
![]() |
#84 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
![]() . |
![]() |
![]() |
![]() |
#85 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
|
![]() |
![]() |
![]() |
#86 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quello di prima era java.io.File, questo invece è java.nio.Files
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#87 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ah ok.
Com'è che su Windows XP continua a metterci una vita? ![]() ![]() |
![]() |
![]() |
![]() |
#88 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ah ok.
![]() Codice:
import java.io.*; import java.nio.file.*; public class Find { static void usage() { System.err.println("java Find <path>"); System.exit(-1); } public static void main(String[] args) throws IOException { int numHidden = 0; int numOther = 0; if (args.length < 1) usage(); try (DirectoryStream<Path> ds = Files.newDirectoryStream(FileSystems.getDefault().getPath(args[0]))) {for (Path p : ds) { if ( Files.isHidden(p) ) numHidden++; else numOther++; } } catch (IOException e) { e.printStackTrace(); } System.out.println("Hidden : " + numHidden); System.out.println("Other : " + numOther); System.out.println("Matched: " + (numHidden + numOther)); } } Ultima modifica di Vincenzo1968 : 16-03-2013 alle 11:53. |
![]() |
![]() |
![]() |
#89 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ah no:
Codice:
import java.io.*; import java.nio.file.*; public class Find { static void usage() { System.err.println("java Find <path>"); System.exit(-1); } public static void main(String[] args) throws IOException { int numHidden = 0; int numOther = 0; if (args.length < 1) usage(); try (DirectoryStream<Path> ds = Files.newDirectoryStream(FileSystems.getDefault().getPath(args[0]))) {for (Path p : ds) { if ( !Files.isDirectory(p) ){ if ( Files.isHidden(p) ) numHidden++; else numOther++; } } } catch (IOException e) { e.printStackTrace(); } System.out.println("Hidden : " + numHidden); System.out.println("Other : " + numOther); System.out.println("Matched: " + (numHidden + numOther)); } } e, inoltre, come faccio a leggere tutti i file nelle sottocartelle? |
![]() |
![]() |
![]() |
#90 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Codice:
import java.nio.file.*; import java.nio.file.attribute.*; import static java.nio.file.FileVisitResult.*; import java.io.IOException; import java.util.*; public class Find { static class TreeVisitor implements FileVisitor<Path> { private int numHidden = 0; private int numOther = 0; public void done() { System.out.println("Hidden : " + numHidden); System.out.println("Other : " + numOther); System.out.println("Matched: " + (numHidden + numOther)); } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { return CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { //if ( !Files.isDirectory(p) ){ try { if ( Files.isHidden(file) ) numHidden++; else numOther++; } catch (IOException e) { e.printStackTrace(); } //} return CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) { if (exc != null) System.err.println("WARNING: " + exc); return CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) { System.err.println("WARNING: " + exc); return CONTINUE; } } static void usage() { System.err.println("java Find <path>"); System.exit(-1); } public static void main(String[] args) throws IOException { if (args.length < 1) usage(); int argi = 1; int maxDepth = Integer.MAX_VALUE; TreeVisitor visitor = new TreeVisitor(); Set<FileVisitOption> opts = Collections.emptySet(); while (argi < args.length) { Path file = Paths.get(args[argi]); Files.walkFileTree(file, opts, maxDepth, visitor); argi++; } visitor.done(); } } |
![]() |
![]() |
![]() |
#91 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Possiamo concludere che non c'è modo, in Java, di ottenere il numero di file nascosti in una cartella? O volete postare il vostro codice?
![]() Ultima modifica di Vincenzo1968 : 16-03-2013 alle 13:08. |
![]() |
![]() |
![]() |
#92 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ah no:
![]() Codice:
import java.nio.file.*; import java.nio.file.attribute.*; import static java.nio.file.FileVisitResult.*; import java.io.IOException; import java.util.*; public class Find { static class TreeVisitor implements FileVisitor<Path> { private int numHidden = 0; private int numOther = 0; public void done() { System.out.println("Hidden : " + numHidden); System.out.println("Other : " + numOther); System.out.println("Matched: " + (numHidden + numOther)); } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { return CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { //if ( !Files.isDirectory(file) ){ try { if ( Files.isHidden(file) ) numHidden++; else numOther++; } catch (IOException e) { e.printStackTrace(); } //} return CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) { if (exc != null) System.err.println("WARNING: " + exc); return CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) { System.err.println("WARNING: " + exc); return CONTINUE; } } static void usage() { System.err.println("java Find <path>"); System.exit(-1); } public static void main(String[] args) throws IOException { if (args.length < 1) usage(); int maxDepth = Integer.MAX_VALUE; TreeVisitor visitor = new TreeVisitor(); Set<FileVisitOption> opts = Collections.emptySet(); Path file = Paths.get(args[0]); Files.walkFileTree(file, opts, maxDepth, visitor); visitor.done(); } } |
![]() |
![]() |
![]() |
#93 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
![]() Codice:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; public class StackBasedIteration { private static int numHidden = 0; private static int numOther = 0; static void Main(string[] args) { TraverseTree(args[0]); Console.WriteLine("Hidden: {0}", numHidden); Console.WriteLine("Other : {0}", numOther); Console.WriteLine("Total : {0}", numHidden + numOther); } public static void TraverseTree(string root) { Stack<string> dirs = new Stack<string>(20); if (!System.IO.Directory.Exists(root)) { throw new ArgumentException(); } dirs.Push(root); while (dirs.Count > 0) { string currentDir = dirs.Pop(); string[] subDirs; try { subDirs = System.IO.Directory.GetDirectories(currentDir); } catch (UnauthorizedAccessException e) { Console.WriteLine(e.Message); continue; } catch (System.IO.DirectoryNotFoundException e) { Console.WriteLine(e.Message); continue; } string[] files = null; try { files = System.IO.Directory.GetFiles(currentDir); } catch (UnauthorizedAccessException e) { Console.WriteLine(e.Message); continue; } catch (System.IO.DirectoryNotFoundException e) { Console.WriteLine(e.Message); continue; } foreach (string file in files) { try { System.IO.FileInfo fi = new System.IO.FileInfo(file); //Console.WriteLine("{0}: {1}", fi.Name, fi.Attributes.ToString()); if ( (fi.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden ) numHidden++; else numOther++; } catch (System.IO.FileNotFoundException e) { Console.WriteLine(e.Message); continue; } } foreach (string str in subDirs) dirs.Push(str); } } } Ultima modifica di Vincenzo1968 : 16-03-2013 alle 17:18. |
![]() |
![]() |
![]() |
#94 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ultima modifica di Vincenzo1968 : 17-03-2013 alle 23:27. |
![]() |
![]() |
![]() |
#95 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
CountFilesPython.py:
Codice:
import os import sys if os.name== 'nt': import win32api, win32con numHidden = 0 numOther = 0 def isHidden(p): if os.name== 'nt': attribute = win32api.GetFileAttributes(p) return attribute & win32con.FILE_ATTRIBUTE_HIDDEN else: return p.startswith('.') #linux def walk(dir): global numHidden global numOther try: for name in os.listdir(dir): path = os.path.join(dir, name) if os.path.isfile(path): #print path if isHidden(path): numHidden += 1 else: numOther += 1 else: walk(path) except: print "Errore: ", path walk(sys.argv[1]) print "Hidden : ", numHidden print "Other : ", numOther print "Total : ", numHidden + numOther ![]() ![]() ![]() ![]() Si noti come la versione Java abbia tempi mostruosamente alti la prima volta che viene avviata. E non si capisce perché mai l'utente debba avviare l'applicazione una seconda volta. Solo per poter dire: "Ah ma dalla seconda volta ci mette solo 30 secondi"? Dunque la risposta alla domanda "vale la pena, in questo caso, utilizzare Java-C via JNI?" è: si! Si si. Siiiiiiiii!!! Tenendo conto anche che la versione iterativa della dll ci mette poco più di 8 secondi per compiere il lavoro. ![]() La versione C#, invece, ha tempi accettabili fin dal primo avvio. Non buoni come la versione C, ma accettabili, ma, tutto sommato, buoni. ![]() La versione Python risulta la più veloce di tutte(ma solo dal secondo avvio, LOL!) ma restituisce un conteggio errato(erratissimo). pypy da un messaggio di errore: "ImportError: No module named win32api" LOL! Ultima modifica di Vincenzo1968 : 18-03-2013 alle 18:09. |
![]() |
![]() |
![]() |
#96 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
![]() ![]() |
![]() |
![]() |
![]() |
#97 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Linux, finalmente!
![]() ![]() ![]() Ultima modifica di Vincenzo1968 : 18-03-2013 alle 16:00. |
![]() |
![]() |
![]() |
#98 |
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
Alla fin fine riassumendo solo con java non si può risolvere il problema; che dire, speriamo che i programmatori java risolvano queto problema, magari dopo aver letto questo forum
![]() |
![]() |
![]() |
![]() |
#99 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
http://www.filedropper.com/findnew Il sorgente è: Find.java. Il problema, casomai, è nella versione python(eh, ma non cominciamo! L'esempio l'ho preso dal sito ufficiale). ![]() Ultima modifica di Vincenzo1968 : 18-03-2013 alle 17:42. |
|
![]() |
![]() |
![]() |
#100 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Anzi, è talmente breve che te lo posto per intero:
Codice:
import java.nio.file.*; import java.nio.file.attribute.*; import static java.nio.file.FileVisitResult.*; import java.io.IOException; import java.util.*; public class Find { static class TreeVisitor implements FileVisitor<Path> { private int numHidden = 0; private int numOther = 0; public void done() { System.out.println("Hidden : " + numHidden); System.out.println("Other : " + numOther); System.out.println("Matched: " + (numHidden + numOther)); } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { return CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { //if ( !Files.isDirectory(file) ){ try { if ( Files.isHidden(file) ) numHidden++; else numOther++; } catch (IOException e) { e.printStackTrace(); } //} return CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) { if (exc != null) System.err.println("WARNING: " + exc); return CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) { System.err.println("WARNING: " + exc); return CONTINUE; } } static void usage() { System.err.println("java Find <path>"); System.exit(-1); } public static void main(String[] args) throws IOException { if (args.length < 1) usage(); int maxDepth = Integer.MAX_VALUE; TreeVisitor visitor = new TreeVisitor(); Set<FileVisitOption> opts = Collections.emptySet(); Path file = Paths.get(args[0]); Files.walkFileTree(file, opts, maxDepth, visitor); visitor.done(); } } ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:49.