使用 Java 写入文件时权限被拒绝
Permission denied when writing a file with Java
我正在尝试 运行 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但是我需要运行这段代码。你能告诉我代码有什么问题吗?提前致谢!
来自 JGibbLDA site ...
JGibbLDA also saves a file called wordmap.txt that contains the maps between words and word's IDs (integer).
wordmap.txt在源码中有两个文件被引用:
LDACmdOption.java and Model.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 : The input training data directory
所以将其添加到您的选项列表中,然后重试。希望对您有所帮助。
JGibbLDA
使用一个 'wordmap.txt'
临时文件,如果您不提供文件的位置,它将尝试创建一个。
由于 user
您正在使用 运行 program
没有创建新文件的权限 '/wordmap.txt'
,因此出现错误。
解决方法是获得用户许可(或)通过 -dir /<path>/wordmap.txt
选项提供位置。
我正在尝试 运行 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但是我需要运行这段代码。你能告诉我代码有什么问题吗?提前致谢!
来自 JGibbLDA site ...
JGibbLDA also saves a file called wordmap.txt that contains the maps between words and word's IDs (integer).
wordmap.txt在源码中有两个文件被引用:
LDACmdOption.java and Model.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 : The input training data directory
所以将其添加到您的选项列表中,然后重试。希望对您有所帮助。
JGibbLDA
使用一个 'wordmap.txt'
临时文件,如果您不提供文件的位置,它将尝试创建一个。
由于 user
您正在使用 运行 program
没有创建新文件的权限 '/wordmap.txt'
,因此出现错误。
解决方法是获得用户许可(或)通过 -dir /<path>/wordmap.txt
选项提供位置。