Add cardinal methods.
This commit is contained in:
parent
cb0a16fe13
commit
1fe86f0b8a
2 changed files with 109 additions and 6 deletions
|
@ -17,6 +17,7 @@ public class FileIterator extends Vector<FileIteratorState> implements Iterator<
|
|||
protected int currentDepth;
|
||||
protected Pattern pattern;
|
||||
protected File previous;
|
||||
protected boolean followLink;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -34,6 +35,7 @@ public class FileIterator extends Vector<FileIteratorState> implements Iterator<
|
|||
|
||||
this.pattern = null;
|
||||
this.previous = null;
|
||||
this.followLink = false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -61,6 +63,7 @@ public class FileIterator extends Vector<FileIteratorState> implements Iterator<
|
|||
}
|
||||
|
||||
this.previous = null;
|
||||
this.followLink = false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -75,10 +78,28 @@ public class FileIterator extends Vector<FileIteratorState> implements Iterator<
|
|||
this.add(new FileIteratorState(pathnames, prefix));
|
||||
this.pattern = null;
|
||||
this.previous = null;
|
||||
this.followLink = false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void reset ()
|
||||
{
|
||||
this.currentDepth = 0;
|
||||
this.previous = null;
|
||||
if (this.size() > 0)
|
||||
{
|
||||
this.get(0).reset();
|
||||
FileIteratorState firstState = this.get(0);
|
||||
this.removeAllElements();
|
||||
this.add(firstState);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
@ -171,14 +192,15 @@ public class FileIterator extends Vector<FileIteratorState> implements Iterator<
|
|||
}
|
||||
else
|
||||
{
|
||||
if ((this.pattern == null) || (this.pattern.matcher(next.getPath()).matches()))
|
||||
if (((this.pattern == null) || (this.pattern.matcher(next.getPath()).matches())) && (follow(next)))
|
||||
{
|
||||
ended = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.currentState().next();
|
||||
if (next.isDirectory())
|
||||
|
||||
if (next.isDirectory() && (follow(next)))
|
||||
{
|
||||
this.push(next);
|
||||
}
|
||||
|
@ -214,14 +236,16 @@ public class FileIterator extends Vector<FileIteratorState> implements Iterator<
|
|||
result = this.currentState().next();
|
||||
this.previous = result;
|
||||
|
||||
|
||||
if (result.isDirectory())
|
||||
if (result != null)
|
||||
{
|
||||
this.push(result);
|
||||
if (result.isDirectory())
|
||||
{
|
||||
this.push(result);
|
||||
}
|
||||
}
|
||||
|
||||
shift();
|
||||
|
||||
|
||||
//
|
||||
return(result);
|
||||
}
|
||||
|
@ -241,6 +265,74 @@ public class FileIterator extends Vector<FileIteratorState> implements Iterator<
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
static public boolean isLink(File file) throws Exception
|
||||
{
|
||||
boolean result;
|
||||
if (file.getCanonicalPath().equals(file.getAbsolutePath()))
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
|
||||
//
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public boolean follow(File file)
|
||||
{
|
||||
boolean result;
|
||||
|
||||
result = false;
|
||||
try
|
||||
{
|
||||
if ((this.followLink) || (!isLink(file)))
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
System.err.println("ERROR with file [" + this.next() + "]: " + exception.getMessage());
|
||||
result = false;
|
||||
}
|
||||
|
||||
//
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public int finalCountdown()
|
||||
{
|
||||
int result;
|
||||
|
||||
result = 0;
|
||||
while (this.next() != null)
|
||||
{
|
||||
result += 1;
|
||||
}
|
||||
|
||||
//
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -17,6 +17,8 @@ public class FileIteratorState implements Iterator<File>
|
|||
*/
|
||||
public FileIteratorState (String[] pathnames, String prefix)
|
||||
{
|
||||
this.currentIndex = 0;
|
||||
|
||||
if (prefix == null)
|
||||
{
|
||||
prefix = "";
|
||||
|
@ -56,6 +58,15 @@ public class FileIteratorState implements Iterator<File>
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void reset()
|
||||
{
|
||||
currentIndex = 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue