如何使用Java在任何操作系统中创建隐藏文件

如何使用Java在任何操作系统中创建隐藏文件,java,hidden-files,Java,Hidden Files,我试图在Json文件中创建和编写此代码,但如何在任何操作系统(Windows或Mac)中隐藏此代码 有关实际支持隐藏文件属性的Windows和其他操作系统,请参见。甚至有多种方法可以做到这一点 对于Unix/Linux,名称以点开头的文件和文件夹被认为是隐藏的(例如.ssh)。默认情况下,这些选项不可见。当然,用户可以在浏览器中打开“显示隐藏文件”或使用-a查看ls。不过,出于方便等原因,这应该足够了。我所做的是创建一个OSValidator,并为每个操作系统编码我的文件并将其保存在应用程序目录

我试图在Json文件中创建和编写此代码,但如何在任何操作系统(Windows或Mac)中隐藏此代码

有关实际支持隐藏文件属性的Windows和其他操作系统,请参见。甚至有多种方法可以做到这一点


对于Unix/Linux,名称以点开头的文件和文件夹被认为是隐藏的(例如
.ssh
)。默认情况下,这些选项不可见。当然,用户可以在浏览器中打开“显示隐藏文件”或使用
-a
查看
ls
。不过,出于方便等原因,这应该足够了。

我所做的是创建一个OSValidator,并为每个操作系统编码我的文件并将其保存在应用程序目录(windows:appdata,mac:Application Support)中。这似乎是最容易做到的

public class OSValidator {
    private static String OS = System.getProperty("os.name").toLowerCase();

    public static boolean isWindows(){
        return (OS.indexOf("win")>=0);
    }

    public static boolean isMac(){
        return (OS.indexOf("mac")>=0);
    }

    public static boolean isUnix() {
        return (OS.indexOf("nix") >=0 || OS.indexOf("nux") >=0 || OS.indexOf("aix") >= 0);
    }

    public static boolean isSolaris(){
        return (OS.indexOf("sunos") >=0);
    }
}



if (OSValidator.isWindows()) {
            System.out.println("This is Windows");
            file = new File(System.getenv("APPDATA") + File.separator + "TargetApp" + File.separator +"config.json");

            if (!file.exists()) {
                try {
                    FileUtils.forceMkdir(file.getParentFile());
                } catch (IOException ex) {
                    Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        } else if (OSValidator.isMac()) {
            System.out.println("This is Mac");

            file = new File(System.getProperty("user.home") + File.separator + "Library" + File.separator + "Application Support"
                    + File.separator + "config.json");
        }

你对隐藏的定义是什么?你不能。(因为并不是所有的操作系统都支持隐藏文件。(感谢上帝!)要做到这一点,你需要为每个操作系统系列创建一个合适的方法。“隐藏”文件没有标准的通用概念。另外,一个更好的方法是将你的私人文件保存在一个专门用于这类事情的私人文件夹中。(Windows上适当的
AppData
目录,OS X上适当的
~/Library/Application Support/Your App Name/
,Linux上适当的
~/.config/Your appname/
)目标仅仅是将用户首选项存储在一个持久的位置,而不让用户奇怪为什么突然出现一个文件?因为这样您就可以使用类将数据存储在适合平台的位置。为什么要使用
File.separator
?据我所知,当您使用“/”时,java会自行使用正确的分隔符。此外,验证器似乎相当于;)
public class OSValidator {
    private static String OS = System.getProperty("os.name").toLowerCase();

    public static boolean isWindows(){
        return (OS.indexOf("win")>=0);
    }

    public static boolean isMac(){
        return (OS.indexOf("mac")>=0);
    }

    public static boolean isUnix() {
        return (OS.indexOf("nix") >=0 || OS.indexOf("nux") >=0 || OS.indexOf("aix") >= 0);
    }

    public static boolean isSolaris(){
        return (OS.indexOf("sunos") >=0);
    }
}



if (OSValidator.isWindows()) {
            System.out.println("This is Windows");
            file = new File(System.getenv("APPDATA") + File.separator + "TargetApp" + File.separator +"config.json");

            if (!file.exists()) {
                try {
                    FileUtils.forceMkdir(file.getParentFile());
                } catch (IOException ex) {
                    Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        } else if (OSValidator.isMac()) {
            System.out.println("This is Mac");

            file = new File(System.getProperty("user.home") + File.separator + "Library" + File.separator + "Application Support"
                    + File.separator + "config.json");
        }