java - while循环的双字符串输出
问题描述
我正在尝试制作简单的一类代码,以根据列表将一些确定的文件(照片)从一个文件夹复制到另一个文件夹。该列表保存在单独的 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 在每次循环迭代中翻倍?非常感谢!
解决方案
您的问题出在.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
某些情况下使用,你可以使用 string trim 然后检查 string 是否为空,比如:
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);
}
}
}
}
推荐阅读
- java - 创建一个接口并在另一个包中实现它
- entity-framework-migrations - 生成初始迁移时出错:类型或命名空间名称“迁移”不存在
- reactjs - 在 React 中,如何将额外的 props 传递给功能组件?
- docker - 如何使用 docker-compose 配置 nginx?
- elasticsearch - 使用不同容量(CPU、RAM)的机器配置 Elastic Search 集群以进行滚动升级
- navision - 一个表字段中的多个表关系(Dynamics NAV)
- python - BigQuery 结果到 Panda DataFrame 中的块
- c# - c#如何确定一个文件的完整文件路径?
- android - 全局变量在 activityResult 方法外显示为空
- qt - 我无法选择文本 QT GUI