|
|||||||
|
|
|
![]() |
|
|
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 12: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 14: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 18:18. |
|
|
|
|
|
#94 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ultima modifica di Vincenzo1968 : 18-03-2013 alle 00: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 19: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 17: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 18: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: 10:18.

































