我有这个代码试图在我的Json文件中创建和编写,但我怎么能在任何操作系统(Windows或Mac)中隐藏
File file = new File(System.getProperty("user.home") + File.separator + "Documents" + File.separator + "targetappConfig.json");
if (!(file.exists())) {
org.json.simple.JSONArray userDetails = new org.json.simple.JSONArray();
userDetails.add(userDetail);
jsonObj.put("users", userDetails);
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(jsonObj.toString());
fileWriter.flush();
fileWriter.close();
}
答案 0 :(得分:2)
我所做的是创建一个Validator,对于每个操作系统,我编码我的文件并将其保存在Application Dir中(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");
}
答案 1 :(得分:1)
有关Windows和其他实际支持隐藏文件属性的操作系统,请参阅this question。甚至有多种方法可以做到这一点。
对于Unix / Linux,名称以dot开头的文件和文件夹被视为隐藏(例如.ssh
)。默认情况下,这些不可见。当然,用户可以在浏览器的一个回合“显示隐藏文件”中看到它们,或者使用-a
用于ls
。不过,出于方便原因,这应该足够了。