Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在文件夹列表中查找最后一个文件夹_Java_File - Fatal编程技术网

Java 正在文件夹列表中查找最后一个文件夹

Java 正在文件夹列表中查找最后一个文件夹,java,file,Java,File,有没有更快的方法找到一个里面没有其他文件夹的文件夹 File dir = new File("C:\\Users\\axs0552\\Desktop\\barcode\\"); File[] cartella = dir.listFiles(); List<String> Nome_cartela = null; if (cartella == null) { logger.debug("ERRORE: cartella inesistente, oppure direct

有没有更快的方法找到一个里面没有其他文件夹的文件夹

File dir = new File("C:\\Users\\axs0552\\Desktop\\barcode\\");
File[] cartella = dir.listFiles();

List<String> Nome_cartela = null;
if (cartella == null) {
    logger.debug("ERRORE: cartella inesistente, oppure directoy errata !!");
} else {
    for (int i = 0; i < cartella.length; i++) {
        if (cartella[i].isDirectory()) {
            System.out.println("cartella radice n° :" + i + " " + cartella[i].getName());
            File[] figli = cartella[i].listFiles();
            for (int j = 0; i < figli.length; i++) {
                if (figli[i].isDirectory()) {
                    System.out.println("cartella figlio n° :" + j + " " + figli[i].getName());
                }
            }
        }
    }
}
File dir=新文件(“C:\\Users\\axs0552\\Desktop\\barcode\\”;
File[]cartella=dir.listFiles();
列表Nome_cartela=null;
if(cartella==null){
调试(“错误:cartella inesistente,oppure directoy errata!!”;
}否则{
对于(int i=0;i
如果您想递归地检查所有目录,我建议使用
文件访问者
。这是一个简单的示例,在进入和离开时只输出所有名称,并计算目录数:

public class MyFileVisitor implements FileVisitor<Path> {
    private int dirCount = 0;

    @Override
    public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes bfa) throws IOException {
        System.out.println("Entering directory: " + path);
        dirCount++;
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult postVisitDirectory(Path path, IOException ex) throws IOException {
        System.out.println("Leaving directory: " + path);
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFile(Path path, BasicFileAttributes bfa) throws IOException {
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFileFailed(Path path, IOException ex) throws IOException {
        return FileVisitResult.CONTINUE;
    }

    public int getDirCount() {
        return dirCount;
    }

}

如果要递归检查所有目录,我建议使用
FileVisitor
。这是一个简单的示例,在进入和离开时只输出所有名称,并计算目录数:

public class MyFileVisitor implements FileVisitor<Path> {
    private int dirCount = 0;

    @Override
    public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes bfa) throws IOException {
        System.out.println("Entering directory: " + path);
        dirCount++;
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult postVisitDirectory(Path path, IOException ex) throws IOException {
        System.out.println("Leaving directory: " + path);
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFile(Path path, BasicFileAttributes bfa) throws IOException {
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFileFailed(Path path, IOException ex) throws IOException {
        return FileVisitResult.CONTINUE;
    }

    public int getDirCount() {
        return dirCount;
    }

}

如果您只想从脚本中获取逻辑,可以这样编写(请注意,findFolderWihtoutSubfolders是静态的,只是为了简单起见):


如果您只想从脚本中获取逻辑,可以这样编写(请注意,findFolderWihtoutSubfolders是静态的,只是为了简单起见):


该方法不是递归的。只检查两个级别。使用


该方法不是递归的。只检查两个级别。使用


打印根目录下所有空目录的简单方法可以是下面的代码段

假设以下结构(文件名为
*.file

片段

Path rootPath = Paths.get("/tmp/foo");
Files.walk(rootPath, FileVisitOption.FOLLOW_LINKS)
        .map(Path::toFile)
        .filter((file) -> file.isDirectory() && file.listFiles().length == 0)
        .forEach(System.out::println);
输出

/tmp/foo/bar/barfoo
/tmp/foo/baz
未打印以下目录

/tmp/foo/bar - contains subdirectories and a file
/tmp/foo/bar - contains a file

打印根目录下所有空目录的简单方法可以是下面的代码段

假设以下结构(文件名为
*.file

片段

Path rootPath = Paths.get("/tmp/foo");
Files.walk(rootPath, FileVisitOption.FOLLOW_LINKS)
        .map(Path::toFile)
        .filter((file) -> file.isDirectory() && file.listFiles().length == 0)
        .forEach(System.out::println);
输出

/tmp/foo/bar/barfoo
/tmp/foo/baz
未打印以下目录

/tmp/foo/bar - contains subdirectories and a file
/tmp/foo/bar - contains a file
你可以做以下事情

public class LastFolderFinder {
public static void main(final String[] args){
    final Path dir = Paths.get("C:\\Users\\axs0552\\Desktop\\barcode\\");
    visitDir(dir);
}

private static void visitDir(final Path dir) {
    try (final DirectoryStream<Path> directoryStream = Files.newDirectoryStream(dir, new DirectoryFilter());) {
        final Iterator<Path> iterator = directoryStream.iterator();
        if (iterator.hasNext()) {
            while (iterator.hasNext()) {
                final Path next = iterator.next();
                visitDir(next);
            }
        } else {
            System.out.println("last directory: " + dir);
        }
    } catch (final Exception exception) {
        exception.printStackTrace();
    }
}
}

class DirectoryFilter implements Filter<Path> {
    @Override
    public boolean accept(final Path entry) throws IOException {
        return entry.toFile().isDirectory();
    }
}
公共类LastFolderFinder{
公共静态void main(最终字符串[]args){
final Path dir=Path.get(“C:\\Users\\axs0552\\Desktop\\barcode\\”;
visitDir(dir);
}
专用静态void visitDir(最终路径dir){
try(final DirectoryStream DirectoryStream=Files.newDirectoryStream(dir,newdirectoryFilter());){
final Iterator Iterator=directoryStream.Iterator();
if(iterator.hasNext()){
while(iterator.hasNext()){
final Path next=iterator.next();
visitDir(下一个);
}
}否则{
System.out.println(“最后一个目录:“+dir”);
}
}捕获(最终异常){
异常。printStackTrace();
}
}
}
类DirectoryFilter实现过滤器{
@凌驾
公共布尔接受(最终路径条目)引发IOException{
返回条目.toFile().isDirectory();
}
}
您可以执行以下操作

public class LastFolderFinder {
public static void main(final String[] args){
    final Path dir = Paths.get("C:\\Users\\axs0552\\Desktop\\barcode\\");
    visitDir(dir);
}

private static void visitDir(final Path dir) {
    try (final DirectoryStream<Path> directoryStream = Files.newDirectoryStream(dir, new DirectoryFilter());) {
        final Iterator<Path> iterator = directoryStream.iterator();
        if (iterator.hasNext()) {
            while (iterator.hasNext()) {
                final Path next = iterator.next();
                visitDir(next);
            }
        } else {
            System.out.println("last directory: " + dir);
        }
    } catch (final Exception exception) {
        exception.printStackTrace();
    }
}
}

class DirectoryFilter implements Filter<Path> {
    @Override
    public boolean accept(final Path entry) throws IOException {
        return entry.toFile().isDirectory();
    }
}
公共类LastFolderFinder{
公共静态void main(最终字符串[]args){
final Path dir=Path.get(“C:\\Users\\axs0552\\Desktop\\barcode\\”;
visitDir(dir);
}
专用静态void visitDir(最终路径dir){
try(final DirectoryStream DirectoryStream=Files.newDirectoryStream(dir,newdirectoryFilter());){
final Iterator Iterator=directoryStream.Iterator();
if(iterator.hasNext()){
while(iterator.hasNext()){
final Path next=iterator.next();
visitDir(下一个);
}
}否则{
System.out.println(“最后一个目录:“+dir”);
}
}捕获(最终异常){
异常。printStackTrace();
}
}
}
类DirectoryFilter实现过滤器{
@凌驾
公共布尔接受(最终路径条目)引发IOException{
返回条目.toFile().isDirectory();
}
}

或者您可以执行以下操作

公共类LastFolderFinder{
公共静态void main(最终字符串[]args)引发IOException{
final Path dir=Path.get(“C:\\Users\\axs0552\\Desktop\\barcode\\”;
walkFileTree(dir,新的SimpleFileVisitor(){
@凌驾
公共文件VisitResult preVisitDirectory(最终路径,最终基本文件属性bfa)引发IOException{
if(hasDirectories(path)){
返回FileVisitResult.CONTINUE;
}
System.err.println(路径);
返回FileVisitResult.SKIP_子树;
}
@凌驾
公共文件VisitResult postVisitDirectory(最终路径,最终IOException ex)引发IOException{
返回FileVisitResult.CONTINUE;
}
@凌驾
公共文件VisitResult visitFile(最终路径路径,最终基本文件属性bfa)引发IOException{
返回FileVisitResult.CONTINUE;
}
});
}
私有静态布尔目录(最终路径目录){
try(final DirectoryStream DirectoryStream=Files.newDirectoryStream(dir,newdirectoryFilter());){
final Iterator Iterator=directoryStream.Iterator();
返回iterator.hasNext();
}捕获(最终异常){
异常。printStackTrace();
}
返回false;
}
}
类DirectoryFilter实现过滤器{
@凌驾
公共布尔接受(最终路径条目)引发IOException{
返回条目.toFile().isDirectory();
}
}

或者您可以执行以下操作

公共类LastFolderFinder{
公共静态真空总管