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{
公共静态真空总管