我正在尝试制作简单的一类代码,根据列表将一些确定的文件(照片)从一个文件夹复制到另一个文件夹。列表保存在单独的txt文件中。
最后,我发现文件未找到错误,所以我将整个代码分成几个部分,并用控制台输出对其进行了测试。 那是我在扫描仪while循环中发现的: 所以代码:
import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
public class Sandy2 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f = new File("D:\\\\Javasorter\\List.txt");
Scanner in;
in = new Scanner(f).useDelimiter("[?! .,;:\t\r\n\f\'\"]");
String word, pathbuf1, pathbuf2;
while (in.hasNext()) {
word = in.next().toLowerCase();
System.out.println(word);
Thread.sleep(1000);
pathbuf1 = "\\IMG_" + word + ".CR2";
pathbuf2 = "\\IMG_" + word + ".CR2";
System.out.println(pathbuf1);
System.out.println(pathbuf2);
}
}
}
预期输出:
9452
\ IMG_9452.CR2
\ IMG_9452.CR2
9475
\ IMG_9475.CR2
\ IMG_9475.CR2
依次类推,直到出现下一个列表,但
输出:
9452
\ IMG_9452.CR2
\ IMG_9452.CR2
\ IMG_.CR2
\ IMG_.CR2
9475 \ IMG_9475.CR2
\ IMG_9475.CR2
\ IMG_.CR2
\ IMG_.CR2
以此类推/// 复制命令在完整版程序的同一循环中添加,其中“ \ IMG_9452.CR2”附加到路径srting
因此,在复制第一个文件后,我得到了错误,因为当然没有“ IMG_.CR2”文件。
有人知道为什么\ IMG_.CR2在每次循环迭代中加倍吗? 非常感谢!
答案 0 :(得分:0)
完全删除变量pathbuf2
,您将不再有重复项
答案 1 :(得分:0)
您的问题出在.useDelimiter("[?! .,;:\t\r\n\f\'\"]")
上,因为Scanner
将读取行之间的空格作为字符串对象,因此,如果仍然需要使用Delimiter
,则必须将其删除或更改。
另外,您可以使用正斜杠/
来写文件路径,这样它将更具可读性并且与操作系统无关,并尝试使用try-with-resource
来防止源泄漏。
考虑以下代码:
public static void main(String[] args) throws Exception {
try (Scanner in = new Scanner(new File("D:/Javasorter/List.txt"))) {
// in.useDelimiter("[?! .,;:\t\r\n\f\'\"]");
String word, pathbuf1, pathbuf2;
while (in.hasNext()) {
word = in.next().toLowerCase();
System.out.println(word);
Thread.sleep(1000);
pathbuf1 = "\\IMG_" + word + ".CR2";
pathbuf2 = "\\IMG_" + word + ".CR2";
System.out.println(pathbuf1);
System.out.println(pathbuf2);
}
}
}
如果在某些情况下要使用Delimiter
,则可以使用字符串修整,然后检查字符串是否为空,例如:
public static void main(String[] args) throws Exception {
try (Scanner in = new Scanner(new File("D:/Javasorter/List.txt"))) {
in.useDelimiter("[?! .,;:\t\r\n\f\'\"]");
String word, pathbuf1, pathbuf2;
while (in.hasNext()) {
word = in.next().trim().toLowerCase();
if (!word.isEmpty()) {
System.out.println(word);
Thread.sleep(1000);
pathbuf1 = "\\IMG_" + word + ".CR2";
pathbuf2 = "\\IMG_" + word + ".CR2";
System.out.println(pathbuf1);
System.out.println(pathbuf2);
}
}
}
}