有没有办法通过主程序有一个目录运行?

Is there a way to have a directory run through the main program?

我无法将目录传递给下面的代码。当系统提示我输入目录时,我按如下所示进行操作:C:\Users。我得到一个 0 字节的输出,这是不准确的。这意味着程序没有注册键入的目录。

代码:

//import jdk.internal.icu.text.UnicodeSet;

import java.io.File;
import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;



public class Hwk2018
{
    public static void main(String[] args)
    {

        //String s = "C:\Users\

        //File filess = new File(s);

        System.out.println("Enter a directory or a file: ");
        Scanner input = new Scanner(System.in);
        String directory = input.nextLine();

        Hwk2018 obj = new Hwk2018();

        System.out.println(obj.getSize(new File(directory)) + " bytes");
    }


        int i = 0;
        Queue<File> que = new LinkedList<>();

        public long getSSize(File directory)
        {
            long size = 0;
            que.add(directory);


            while(!que.isEmpty())
            {
                File t = que.poll();
                if(!t.isDirectory())
                {
                    size += t.length();
                }
                else
                {
                    //for(int i = 0; )

                    que.add(directory);

                }
            }
            return size;


        }

        public static long getSize(File file)
        {
            long size = 0;

            if (file.isDirectory()) {
                File[] files = file.listFiles();
                for (int i = 0; files != null && i < files.length; i++) {
                    size += getSize(files[i]);
                }
            } else {
                size += file.length();
            }

            return size;

        }

}

在终端上 运行 'MBP src % java Hwk2018' 并随后键入 C:\Users:

时输出
0 bytes

预期输出:

87 bytes (or some numerical value other than 0)

我会使用 File#exists 来验证用户输入的路径是否有效,您也可以添加 File#isDirectory 检查,但由于 getSize 正在执行此操作,因此可能不需要.

subsequently typing C:\Users: I'm using a Mac

Mac 没有像 windows 这样的“驱动器”概念,它们有“卷”,因此它可能应该是 /Users,但你可以运行 进入其他问题,因为您将没有其他用户的读取权限。

以下将打印您的“主”目录的路径,并使用 File#exist 验证用户输入

import java.io.File;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        //String s = "C:\Users\
        //File filess = new File(s);

        String directory = System.getProperty("user.home");
        System.out.println("Your home directory is [" + directory + "]");

        System.out.println("Enter a directory or a file: ");
        Scanner input = new Scanner(System.in);
        directory = input.nextLine();

        File parent = new File(directory);
        if (parent.exists()) {
            Main obj = new Main();
            System.out.println(obj.getSize(new File(directory)) + " bytes");
        } else {
            System.out.println(directory + " is not a valid directory");
        }
    }

    public static long getSize(File file) {
        long size = 0;

        System.out.println("Scanning " + file.getName());

        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (int i = 0; files != null && i < files.length; i++) {
                size += getSize(files[i]);
            }
        } else {
            size += file.length();
        }

        return size;

    }

}