有没有办法通过主程序有一个目录运行?
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;
}
}
我无法将目录传递给下面的代码。当系统提示我输入目录时,我按如下所示进行操作: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;
}
}