【问题标题】:How to access "user.home" with Java on a Raspberry Pi and write to it?如何在 Raspberry Pi 上使用 Java 访问“user.home”并写入它?
【发布时间】:2021-09-03 16:12:21
【问题描述】:

我在 Raspberry Pi 上创建文件时遇到了一些问题。相同的代码在 Windows 上运行没有任何问题...

令人惊讶的是System.getProperty("user.home"); 只返回/

System.getProperty("user.dir"); 返回/var/lib/abc 但我猜我的应用程序无法访问它。

代码:

    String path = System.getProperty("user.dir") + "/def";
    File file =  new File("/a.txt");
    file.delete();
    try {
        new File(path).mkdirs();
        file.createNewFile();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    try {
        FileWriter writer = new FileWriter(file);
        writer.write(value);
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

例外情况:

/var/lib/abc/def/a.txt (No such file or directory)     
java.base/java.io.FileInputStream.open0(Native Method)
java.base/java.io.FileInputStream.open(FileInputStream.java:219)
java.base/java.io.FileInputStream.(FileInputStream.java:157) 
java.base/java.io.FileInputStream.(FileInputStream.java:112) 
java.base/java.io.FileReader.(FileReader.java:60) 
No such file or directory
java.base/java.io.UnixFileSystem.createFileExclusively(Native Method)
java.base/java.io.File.createNewFile(File.java:1035) 
/var/lib/abc/def/a.txt (No such file or directory) 
java.base/java.io.FileOutputStream.open0(Native Method)
java.base/java.io.FileOutputStream.open(FileOutputStream.java:298)
java.base/java.io.FileOutputStream.(FileOutputStream.java:237)
java.base/java.io.FileOutputStream.(FileOutputStream.java:187)
java.base/java.io.FileWriter.(FileWriter.java:96) 

任何想法在哪里以及如何在没有访问限制的情况下创建文件?它应该可以跨平台工作。

【问题讨论】:

  • @MarsAtomic 不,我已经看过这篇文章。我不是想找出任何用户信息。我只是想在“某处”保存一个文件。但它必须跨平台(Windows 和 Linux)工作,而 Raspberry Pi 操作系统目前无法正常工作......
  • 我的感觉是这是用户创建方式的专长。您是否检查了用户的主目录在哪里以及在 Java 之外应用了哪些权限?那么至少您知道问题与操作系统有关,而不是 Java。

标签: java file raspberry-pi filesystems system-properties


【解决方案1】:

试试 Runtime.getRuntime().exec(),

public static String getUserHomeDir() throws IOException {
      return new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(new String[]{"sh", "-c", "echo $HOME"}).getInputStream())).readLine();
}

pwd 用于user.dir

【讨论】:

  • 如果系统属性包含错误值,这将有所帮助。我怀疑这种解决方法会带来不同的价值,我怀疑它会解决访问权限问题。
猜你喜欢
  • 2021-11-28
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 2013-03-27
  • 2015-07-15
相关资源
最近更新 更多