我试图在java中打开这个文件,我想知道我做错了什么。 in文件与我的Java文件位于同一目录中,但我尝试用netbeans和eclipse打开它,它给了一个找不到文件的异常。有人可以帮我打开这个文件并从中读取。我是java文件的新手。这是代码
import java.util.*;
import java.io.*;
public class Practice
{
public static void main(String[] args)throws IOException
{
FileReader fin = new FileReader("anagrams.in");
BufferedReader br = new BufferedReader(fin);
System.out.println(fin);
String string = "Madam Curie";
String test = "Radium came";
string = string.toLowerCase();
test = test.toLowerCase();
string = string.replaceAll("[^a-zA-Z0-9]+", "");
test = test.replaceAll("[^a-zA-Z0-9]+", "");
char[] array = string.toCharArray();
char[] array2 = test.toCharArray();
boolean flag = false;
HashMap hm = new HashMap();
for(int i = 0; i < array.length; i++)
{
hm.put(array[i], array[i]);
}
for(int i = 0; i < array2.length; i++)
{
if(hm.get(array2[i]) == null || test.length() != string.length())
{
flag = false;
i = array2.length;
}
else
{
flag = true;
}
}
System.out.println(flag);
}
}
答案 0 :(得分:1)
确保该文件与.class
文件位于同一目录中。它与.java
文件是否相同无关紧要。
除此之外,我能看到的唯一问题是你的缩进,这无关紧要。
答案 1 :(得分:1)
一些提示:
for
循环的每个循环 关于2,尝试这样的事情:
public static void listDir() {
File current = new File(".");
System.out.println(current.getAbsolutePath());
for (String filename : current.list()) {
System.out.println(filename);
}
}
然后在main
中,只需在其他所有内容之前调用listDir
,然后查看您是否从正确的目录运行应用程序,以及目录中是否有"anagrams.in"
。请注意,某些平台区分大小写。
关于3和4,考虑使用这样的辅助方法:
static Set<Character> usedCharactersIn(String s) {
Set<Character> set = new HashSet<Character>();
for (char ch : s.toLowerCase().toCharArray()) {
set.add(ch);
}
return set;
}
请注意Set<E>
如何使用而不是Map<K,V>
。看看剩下的代码,你似乎并不需要映射,而是需要一些映射(稍后会详细介绍)。
然后你可以在main
中使用这样的东西,这使得逻辑非常易读:
String s1 = ...;
String s2 = ...;
boolean isNotQuiteAnagram = (s1.length() == s2.length()) &&
usedCharactersIn(s1).containsAll(usedCharactersIn(s2));
注意变量现在如何命名相当合理,突出显示他们的角色。另请注意,此逻辑并不能完全确定s1
是s2
的字谜(例如"abb"
和"aab"
),但这实际上就是您正在做的事情。
因为这看起来像是家庭作业,所以我会留意你试着找出两个字符串是字符串的时间。
答案 2 :(得分:1)
通常的做法是将资源放在运行时类路径中,或者将其路径添加到运行时类路径中,以便您可以通过类加载器获取它。在Java IO中使用相对路径被认为是不好的做法,因为它破坏了可移植性。相对路径将取决于您在Java代码中完全无法控制的当前工作目录。
将它放在类路径中后(假设它与Java类本身在同一个文件夹中),只需这样做:
BufferedReader reader = null;
try {
InputStream input = Practice.class.getResourceAsStream("anagrams.in");
reader = new BufferedReader(new InputStreamReader(input, "UTF-8")); // Or whatever encoding it is in.
// Process it.
// ...
} finally {
if (reader != null) try { reader.close(); } catch (IOException ignore) {}
}
在finally
中关闭是强制性的,以便在阅读后解除对文件的锁定。
答案 3 :(得分:0)
将anagrams.in
文件放在与.class文件相同的位置。然后,您将能够读取该文件。 this应该可以帮助您获得有关如何从Java中读取文件的链接。