gpt4 book ai didi

java - 通过小部件创建时出现重复文件名的问题

转载 作者:行者123 更新时间:2023-12-01 12:37:48 25 4
gpt4 key购买 nike

我有一个小部件,允许用户将电子邮件或文件拖放到小部件中,以将其复制到他们的文件系统中。这是 OpenNTF 中的 FileExplorer 项目,由比我更有经验的人设计的。如果当前文件名已存在于它们放置的位置,我想修改它以提供新的文件名。对于电子邮件,我希望能够获取发件人和日期,但当我尝试在拖放电子邮件期间访问文件内容时,我一直抛出错误。

所以,我的问题其实很简单。我有“if”来确定文件名是否被采用,但我不知所措地试图弄清楚如何测试文件名的多个选项(例如编号然后“file1.eml”,“file2.eml”,“文件3.eml')。我尝试在下面插入“DUPLICATE”一词,但我并没有感到高兴。

try {
if (source.isDirectory()) {
File dirTarget = new File(fDest.getAbsoluteFile() + File.separator + source.getName());
if (!dirTarget.exists()) {
dirTarget.mkdir();
}
copyDir(monitor, source, dirTarget);
}
if (source.isFile()) {
File dest = new File(fDest.getAbsolutePath() + File.separator + source.getName());

if (dest.getAbsolutePath().compareTo(source.getAbsolutePath()) != 0) {
copyFile(monitor, source, dest);
} else {
dest = new File(fDest.getAbsolutePath() + File.separator + "DUPLICATE" + File.separator + source.getName());
copyFile(monitor, source, dest);
}
}
} catch (IOException e) {
}

作为引用,copyFile 方法的参数是

private void copyFile(IProgressMonitor monitor, File fSource, File fTarget) throws IOException

最佳答案

您需要构建不同的文件名。

  File.seperator

结果为/\或 : ,具体取决于您的平台,因为它是分隔 the directory from the file 的字符。

由于您要删除文件,因此不需要检查目录,这由您决定。您需要一个循环来测试文件名。为了使其易于使用 (DUPLICATE 1) (DUPLICATE 2) 等。类似这样的东西:

private final static String DUPLICATE = "DUPLICATE";

private void copyOut(File source, File fDest, Monitor monitor) {
try {
if (!source.exists() || !fDest.exists()) {
// one or two files missing, can't copy
// handle error here!
} else {
String destName = fDest.getAbsolutePath()+ File.separator + source.getName();
File dest = new File(destName);

if (source.isDirectory()) {
if (!dest.exists()) {
destPath.mkdirs(); // Fix missing
} else if (dest.isFile()) {
// Raise an error. Destination exists as file source is directory!!!
}
} else { // We checked for existence and dir, so it is a file
// Don't overwrite an existing file
dest = this.checkforDuplicate(dest);
}

copyFile(monitor, source, dest);
}
} catch (IOException e) {
// Error handling missing here!
}
}

private File checkforDuplicate(File dest) {
if (!dest.exists()) {
return dest;
}
int duplicateNum = 1;
while (true) {
ArrayList<String> pieces = Arrays.asList(dest.getAbsolutePath().split("."));
pieces.add(pieces.size()-1, DUPLICATE);
if (duplicateNum > 1) {
pieces.add(pieces.size()-1,Integer.toString(duplicateNum));
}
duplicateNum++;
StringBuilder newName = newStringBuilder();
for (String s : pieces) {
newName.append(s);
newName.append(".");
}
// Strip the last .
String outName = newName.substring(0, newName.length()-2);
File result = new File(outName);
if (!result.exists()) {
return result;
}

}
}

检查代码,注销内存,会包含拼写错误。也不处理不包含点的文件名。

关于java - 通过小部件创建时出现重复文件名的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25414279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com