【问题标题】:Permission denied when writing a file with Java使用 Java 写入文件时权限被拒绝
【发布时间】:2016-10-06 10:29:33
【问题描述】:

我正在尝试运行JGibbLDA 代码,当我使用java -mx512M -cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -est -alpha 0.5 -beta 0.1 -ntopics 100 -niters 1000 -savestep 100 -twords 20 -dfile /path/to/data/data.txt 运行代码时,我收到一条错误消息:

Error while writing word map /wordmap.txt (Permission denied)
java.io.FileNotFoundException: /wordmap.txt (Permission denied),

指的是下面的代码:

public boolean writeWordMap(String wordMapFile){
    try{
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(wordMapFile), "UTF-8"));

        //write number of words
        writer.write(word2id.size() + "\n");

        //write word to id
        Iterator<String> it = word2id.keySet().iterator();
        while (it.hasNext()){
            String key = it.next();
            Integer value = word2id.get(key);

            writer.write(key + " " + value + "\n");
        }

        writer.close();
        return true;
    }
    catch (Exception e){
        System.out.println("Error while writing word map " + e.getMessage());
        e.printStackTrace();
        return false;
    }


}
}

我不熟悉 Java,但我需要运行这段代码。你能告诉我代码有什么问题吗?提前谢谢!

【问题讨论】:

  • 看来wordmap.txt的文件权限只需要改一下。
  • 据我所知,代码没有问题。问题是您使用的帐户没有写入权限,似乎是根目录 (/)。
  • 将文件写入文件系统根目录时出现异常。引用的代码用于读取文件,不匹配异常。

标签: java lda


【解决方案1】:

来自JGibbLDA site ...

JGibbLDA 还保存了一个名为 wordmap.txt 的文件,其中包含单词和单词 ID(整数)之间的映射。

wordmap.txt在源代码的两个文件中被引用:

LDACmdOption.javaModel.java

您提到的具体错误与 wordmap.txt 的阅读无关,但很可能源自 Dictionary.java AND Estimator.java:

src/jgibblda/Dictionary.java: public boolean writeWordMap(String wordMapFile)

src/jgibblda/Estimator.java:trnModel.data.localDict.writeWordMap(option.dir + File.separator + option.wordMapFileName);

更具体地说,它使用根目录 / 并尝试将 wordmap.txt 写入根上下文。如果您是非特权用户并且无法写入 /,那将无法正常工作。您可以尝试以 root 身份运行该程序,但我不建议这样做,因为破坏安全性是一个糟糕的主意。我建议设置:

option.dir

到您可以写入的位置并尝试再次运行它...

来自网站上的手册:

-dir : 输入训练数据目录

因此,将其添加到您的选项列表中,然后重试。我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    JGibbLDA 使用'wordmap.txt' 临时文件,如果您不提供该文件的位置,它将尝试创建一个。

    由于您用于运行programuser没有创建新文件'/wordmap.txt'的权限,因此出现错误。

    要解决获得用户的权限(或)通过-dir /&lt;path&gt;/wordmap.txt 选项提供位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2015-11-24
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      相关资源
      最近更新 更多