我有一个包含规则的arrayList“ rules”。每个规则都是一个XML文件,并具有一些属性,例如文件名...
我想将规则从阵列列表复制到名为AllMRG的文件夹中。我在注释之间尝试了代码,但收到消息“源'RG6.31.xml'不存在”。
我通过以下方式更改了代码,但是'RG6.31.xml'仍然存在问题,即使arrayList包含许多规则,文件夹AllMRG还是空的!
第一次尝试:
File AllMRGFolder = new File("AllMRG");
for(int p = 0; p < rules.size(); p++) {
/* File MRGFile = new File(rules.get(p).fileName);
FileUtils.copyFileToDirectory(MRGFile, AllMRGFolder); */
File MRGFile = new File("AllMRG/" + rules.get(p).fileName);
if (!MRGFile.exists()) {
FileUtils.copyFileToDirectory(MRGFile, AllMRGFolder);
}
}
第二次尝试:
String path = "AllMRG";
for(Rule rule : rules) {
File MRGFile = new File(rule.fileName);
Files.copy(MRGFile.toPath(), (new File(path + MRGFile.getName())).toPath(), StandardCopyOption.REPLACE_EXISTING);
}
PS:规则是一类
public class Rule implements Comparable{
public String fileName;
public String matches;
public String TPinstances;
public int nbrOfMatches;
public double T;
@Override
public int compareTo(Object o) {
if(o instanceof Rule){
//processing to compare one Rule with another
}
return 0;
}
}
这里是考虑了Shyam回答后的全部代码。同样的问题仍然存在!
Path directoryPath = Files.createDirectory(Paths.get("AllMGR"));
for(Rule rule : rules) {
Path filePath = directoryPath.resolve(rule.fileName);
Files.createFile(filePath);
File MRGFile = new File(rule.fileName);
String ruleContent = new String(Files.readAllBytes(Paths.get(MRGFile.getPath())));
String fileContent = new String(Files.readAllBytes(filePath));
fileContent=ruleContent;
PrintWriter out13= new PrintWriter("AllMGR/"+rule.fileName+".xml");
out13.print(fileContent);
out13.close();
}
答案 0 :(得分:0)
首先,您要使用File
创建一个新的rule.filename
,而不给出任何预定义的路径。然后,您正在构建一个像path + MRGFile.getName()
这样的路径,而没有任何路径分隔符,并尝试将文件复制到该位置。我认为这行不通。
实际上可以为您提供帮助的是,首先创建一个基本目录,然后在其中创建单个文件。
创建基本目录:
Path directoryPath = Files.createDirectory(Paths.get("AllMGRDir"));
然后对于每个Rule
对象,您都可以使用以下方法创建文件:
for(Rule rule : rules) {
Path filePath = directoryPath.resolve(rule.fileName());
Files.createFile(filePath);
// your remaining code
}
resolve(String other)
方法解析给定的路径。 Java文档说:
将给定的路径字符串转换为
Path
并对此进行解析Path
完全按照resolve(Path)
方法指定的方式。 例如,假设名称分隔符为“ /”,并且路径 表示“ foo / bar” ,然后使用路径字符串调用此方法 “ gus”将导致Path
“ foo / bar / gus”
希望这会有所帮助。