所以我试图遍历一个目录并查找名为“rels.txt”的文件的所有实例,对于每个实例,我想进入该文件并将文件中的各个值加载到HashMap中在Java中。以下是我正在使用的“rels.txt”文件之一的内容:
文字档案:
rId8,image2
rId13,image5
rId7,image1
rId12,image4
rId17,image8
rId15,image7
rId9,image3
rId14,image6
这是我到目前为止的Java代码,它应该遍历目录并将每个值存储在HashMap中,打印出HashMap,然后清除它(以便可以从另一个存储一组新的值)目录中的“rels.txt”文件。)
Java代码:
private void traverse(File directory) throws FileNotFoundException
{
//Get all files in directory
File[] files = directory.listFiles();
for (File file : files)
{
if (file.getName().equals("rels.txt"))
{
Scanner scan = new Scanner(file).useDelimiter(",");
while (scan.hasNextLine())
{
String id;
String image;
id = scan.next();
image = scan.next();
imageMap.put(id, image);
}
System.out.println(imageMap);
imageMap.clear();
}
else if (file.isDirectory())
{
//It's a directory so (recursively) traverse it
traverse(file);
}
}
}
这是我得到的错误/输出,我不太确定我哪里出错了。
错误/输出
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at XMLTagParser.traverse(XMLTagParser.java:153)
at XMLTagParser.traverse(XMLTagParser.java:198)
at XMLTagParser.traverse(XMLTagParser.java:198)
at XMLTagParser.<init>(XMLTagParser.java:27)
at IPDriver.main(IPDriver.java:21)
{image26
rId19=image9
rId31, image15
rId33=image23
rId38, image29
rId21=image11
rId34, image12
rId27=image17
rId30, image28
rId16=image6
rId20, image14
rId32=image22
rId37, image2
rId17=image7
rId25, rId13=image3
rId18, image20
rId35=image25
, image8
rId26=image16
rId39, image24
rId7=image1
rId12, image21
rId14=image4
rId22, image10
rId29=image19
rId24, image13
rId28=image18
rId36, image27
rId15=image5
rId23}
使用这段代码,我基本上只希望能够为项目的另一部分调用HashMap,当我引用其中一个rId值时,我可以得到相应的图像值。有没有人对我可能做错了什么或甚至更有效的解决方案有任何想法?提前谢谢。
工作Java代码感谢Friedrik:
private void traverse(File directory) throws FileNotFoundException
{
//Get all files in directory
File[] files = directory.listFiles();
for (File file : files)
{
if (file.getName().equals("rels.txt"))
{
Scanner scan = new Scanner(file);
while (scan.hasNextLine())
{
String[] line = scan.nextLine().split(",");
imageMap.put(line[0], line[1]);
}
System.out.println(imageMap);
imageMap.clear();
}
else if (file.isDirectory())
{
//It's a directory so (recursively) traverse it
traverse(file);
}
}
}
答案 0 :(得分:3)
由于分隔符是“,”scan.next()一起读取“image2 \ nrId13”。它将返回视为一个字符,而不是分隔符。
另一种方法是,删除扫描仪的“useDelimiter(”,“)”并使用此循环:
Scanner scan = new Scanner(file);
while (scan.hasNextLine())
{
String[] line = scan.nextLine().split(",");
imageMap.put(line[0], line[1]);
}
System.out.println(imageMap)
确保您的文件不会以退货结束。
答案 1 :(得分:1)
假设您的文件正是您所说的,您可以尝试将hasNextLine
更改为hasNext