【问题标题】:Java Targeting Directory Based On Current User基于当前用户的 Java 目标目录
【发布时间】:2017-03-07 10:08:24
【问题描述】:

我已经被这件事困住了至少整整一个月了。

我所拥有的是一个指定目录的代码,然后检查该目录是否为空。如果不是,它会删除其中的所有文件并离开目录文件夹。我用它来清理临时文件和回收站之类的东西。

我这样做的方式是,我在私有方法中声明了一个名为“SRC_FOLDER”的变量,该变量具有我要清理的目录的值。然后在一个公共方法中,我编写了其余的代码。

这里是完整的代码:

import java.io.File;
import java.io.IOException;

public class test {
private static final
    String SRC_FOLDER = "C:\Users\Denisowator\AppData\Local\Temp";

public static void main(String[] args) {
      File directory = new File(SRC_FOLDER);

        //Check if directory exists
        if(!directory.exists()) {
           System.out.println("Directory does not exist.");
           System.out.println("Skipping directory.");
           System.exit(0);
        }
        else {

           try {
           delete(directory);
           }

           catch(IOException e){
               e.printStackTrace();
               System.exit(0);
           }
        }

        System.out.println("Cleaned directory" + SRC_FOLDER + ".");
    }

    public static void delete(File file)
        throws IOException{

        if(file.isDirectory()){

            //If directory is empty
            if(file.list().length==0){
                System.out.println("Directory is empty")
            }
        }
        else {
            //If file exists, then delete it
            file.delete();
            System.out.println("File is deleted : " + file.getAbsolutePath());
        }
    }
  }

如您所见,该变量用作文件的值,该文件本质上是我要清理的文件夹,然后检查文件的长度(其中的文件数量),如果长度大于零,文件被删除。

一切正常,但我遇到的问题是根据用户执行代码的方式指定相同的目录。

假设我将这个程序提供给某人,他们的名字是“Steve”或类似的名字。该代码不起作用,因为它正在用户文件夹中寻找用户“Denisowator”。那么如何根据用户的用户名来更改值呢?

我研究过诸如“user.home”和“user.dir”之类的东西,但我不知道如何将它们实现为变量的值。

【问题讨论】:

  • 使用user.name 环境变量。
  • 我可以简单地实现这个来代替“Denisowator”吗?所以它会是“C:\Users\user.name\AppData\Local\Temp”。
  • 你应该看看这个:stackoverflow.com/questions/585534/…
  • @Denisowator 是的。
  • 我明白了,在这种情况下,如果您需要它仅在 Windows 系统上工作,您可以执行以下操作:System.getenv("AppData") + "\\Local\\Temp"System.getProperty("user.home").replace("Roaming", "Local\\Temp")

标签: java directory subdirectory


【解决方案1】:

通过将“user.home”的值与静态子路径连接来创建变量:

String SRC_FOLDER = System.getProperty("user.home") + "\AppData\Local\Temp";

你也可以通过环境变量创建变量:

String SRC_FOLDER = System.getenv("LOCALAPPDATA") + "\Temp";

但是,后者只会在 windows 上获得一个有效的文件夹。

【讨论】:

  • 谢谢,我现在不能测试这个,因为我在上大学。但是当我回到家时,我会尝试两者,以及问题 cmets 中 Andy 的建议。
  • 刚刚测试过了。它奏效了,但我有一个问题。它只会清除当前用户的目录吗?还是会为每个用户清除同一个目录?我是我电脑上唯一的用户,所以除非我创建一个新帐户,否则我现在无法对其进行测试。
  • btw @Andy Turner 它只是说该目录不存在,并没有清除它。无论如何感谢您的帮助。
  • @Denisowator 该变量仅针对当前用户目录设置。所以代码只会影响登录用户的用户目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多