代码按原样运行,直到用户输入带扩展名(.txt)的文件名并且它已经存在。因此,如果文件“test.txt”存在并且用户决定将新文件命名为“test”,则将其命名为“test(1).txt”,但如果用户添加“test.txt”之类的扩展名,该文件将命名为“test.txt”,下一个文件用户名“test.txt”将保存为“test.txt(1).txt”。
是否可以从JFileChooser
获取文件名,如果用户输入则删除它的扩展名,并在原始文件名及其扩展名中间添加数字后将其用作新文件的名称?我可以将没有扩展名的名称作为String类型,但我需要它作为文件类型。
File ft = fc.getSelectedFile();
String ext = ".txt";
File tmp = new File(ft.getPath());
if (!fc.getSelectedFile().getAbsolutePath().endsWith(ext)){
ft = new File (ft + ext);
}
File test = new File(ft.getPath());
File temp = new File(ft.getPath());
File temp1 = new File(ft.getPath());
int count = 1;
while (temp.exists()) {
if(tmp.getAbsolutePath().endsWith(ext)){
}
File ft1 = new File (tmp + "(" + count + ")");
ft = new File (tmp + "(" + count + ")" + ext);
count++;
temp = new File(ft.getPath());
temp1 = new File(ft1.getPath());
}
if (!temp1.getAbsolutePath().endsWith(ext)){
ft = new File (temp1 + ext);
}
int cnt = count - 1;
if (!test.equals(temp)){
JOptionPane.showMessageDialog(null, "File already exists. So it's saved with (" + cnt + ") at the end.");
}
答案 0 :(得分:0)
嗯,我认为这个条目也许有用: Remove filename extension in Java
我目前没有时间对其进行正确测试(或者更好地测试它),但不应该这样做:
public static String removeExtention(File f) {
String name = f.getName();
// Now we know it's a file - don't need to do any special hidden
// checking or contains() checking because of:
final int lastPeriodPos = name.lastIndexOf('.');
if (lastPeriodPos <= 0)
{
// No period after first character - return name as it was passed in
return f;
}
else
{
// Remove the last period and everything after it
File renamed = new File(f.getParent(), name.substring(0, lastPeriodPos));
return renamed;
}
}
我简单地尝试从上面提到的帖子调整代码,它可能包含一些错误或缺陷。 (如果你找到一些,请不要犹豫,对它们发表评论。其中一些可能是由于我目前缺乏时间,但我总是愿意学习和改进。)但是我希望这可以帮助你找到一个合适的解决方案。你的问题。
答案 1 :(得分:0)
好的,所以我试图在不改变代码的情况下完成这项工作。试试这个:
String filePath = fc.getSelectedFile().getAbsolutePath();
final String ext = ".txt";
String filePathWithoutExt;
if (filePath.endsWith(ext)) {
filePathWithoutExt = filePath.substring(0, filePath.length() - ext.length());
} else {
filePathWithoutExt = filePath;
}
File test = new File(filePathWithoutExt + ext);
File temp = new File(filePathWithoutExt + ext);
int count = 0;
while (temp.exists()) {
count++;
temp = new File(filePathWithoutExt + "(" + count + ")" + ext);
}
if (!test.equals(temp)) {
JOptionPane.showMessageDialog(null,
"File already exists. So it's saved with (" + count + ") at the end.");
}
修改强>
根据Marco N.的建议,最好通过查找.
的最后位置来确定扩展是否存在,因为这也适用于&#34; .txt&#以外的扩展名34 ;.然后,该值将用于拆分字符串。替换代码如下所示:
final int lastPeriodPos = filePath.lastIndexOf(".");
if (lastPeriodPos >= 0) {
filePathWithoutExt = filePath.substring(0, lastPeriodPos);
} else {
filePathWithoutExt = filePath;
但是,如果用户在文件扩展名之前的任何地方输入了包含.
的文件名,则会出现一些问题。