如何知道Agment是Java中的目录还是文件

如何知道Agment是Java中的目录还是文件,java,file,directory,Java,File,Directory,我试图将一个参数传递给一个方法。参数可以是文件或目录 public class ReadCsv { String line = null; BufferedReader br ; public void readCsv(String arg) throws Exception{ File file = new File(arg); if(file.isDirectory()){ for(File dir : file

我试图将一个参数传递给一个方法。参数可以是文件或目录

public class ReadCsv {

    String line =  null;
    BufferedReader br ;

    public void readCsv(String arg) throws Exception{

        File file = new File(arg);
        if(file.isDirectory()){
        for(File dir : file.listFiles()){

                System.out.println(file.getName());
                reader(dir);
            }
        }
        else{
                reader(file);

            }
        }

    public void reader(File file) throws Exception {
        br = new BufferedReader(new FileReader(file));
        while((line=br.readLine())!=null){
            //Code 
    }
}

但是代码没有按照我想要的那样工作。当我传递一个参数
arg
时,我必须确定它是文件还是目录,并根据它工作。有人能帮我确定一个文件或目录吗?如果arg是一个目录,我的代码会循环4次

您的代码看起来很好,看起来您只是输出了目录(您将其命名为“file”),而不是文件(您将其命名为“dir”)

for(File dir : file.listFiles()) {
   System.out.println(dir.getName()); //you were outputting file.getName()
}

您的代码看起来很好,看起来您只是输出了目录(您将其命名为“file”),而不是文件(您将其命名为“dir”)

for(File dir : file.listFiles()) {
   System.out.println(dir.getName()); //you were outputting file.getName()
}

File
具有可用于检查类型的
isDirectory()
isFile()
方法。

File
具有可用于检查类型的
isDirectory()
isFile()
方法。

参见官方文档。有以下几种方法:

isFile();
isDirectory();
见正式文件。有以下几种方法:

isFile();
isDirectory();
试试看。。 它打印所有目录和文件名

如果是嵌套目录:

public class ReadCsv {

    String line =  null;
    BufferedReader br ;

    public void readCsv(String arg) throws Exception{

        File file = new File(arg);
        checkIsDir(file );
    }

    public void checkIsDir(File file) throws Exception {

       if(file.isDirectory()){

            System.out.println("Directory : "file.getName());
            for(File dir : file.listFiles()){
                  checkIsDir(dir);
            }
        }
        else{
                System.out.println("File : "file.getName());
                reader(file);    
            }
    }

    public void reader(File file) throws Exception {
        br = new BufferedReader(new FileReader(file));
        while((line=br.readLine())!=null){
            //Code 
    }
}
试试看。。 它打印所有目录和文件名

如果是嵌套目录:

public class ReadCsv {

    String line =  null;
    BufferedReader br ;

    public void readCsv(String arg) throws Exception{

        File file = new File(arg);
        checkIsDir(file );
    }

    public void checkIsDir(File file) throws Exception {

       if(file.isDirectory()){

            System.out.println("Directory : "file.getName());
            for(File dir : file.listFiles()){
                  checkIsDir(dir);
            }
        }
        else{
                System.out.println("File : "file.getName());
                reader(file);    
            }
    }

    public void reader(File file) throws Exception {
        br = new BufferedReader(new FileReader(file));
        while((line=br.readLine())!=null){
            //Code 
    }
}

在readCsv方法中,您已经拥有了所需的功能(即File#isDirectory),这不是很有趣吗?您的ARG是DIR than,1>该DIR下可能有其他目录2>您确定DIR(if is directory)下的所有目录都是File。对于第一种情况,我已经发布了我的答案。有趣的是,您已经在readCsv方法中拥有了所需的功能(即File#isDirectory)?您的参数是DIR than,1>该DIR下可能有其他目录2>您确定DIR(if is directory)下的所有目录都是File。对于第一种情况,我已经发布了我的答案。这是一个代码改进(包括嵌套目录),它碰巧修复了问题中的错误(多次输出目录名),没有解释。所以这并不是一个真正的答案。
@Ross..
我已经在问题下做了评论,用于嵌套目录。现在也在这里进行一些编辑。感谢这是一个代码改进(包括嵌套目录),它碰巧修复了有问题的错误(多次输出目录名),而无需解释。所以这并不是一个真正的答案。
@Ross..
我已经在问题下做了评论,用于嵌套目录。现在也在这里进行一些编辑。谢谢正如ankit337所说,它不是递归的,所以不会处理嵌套目录。同样,正如ankit337所说,它不是递归的,所以不会处理嵌套目录。