Java读取src文件夹文件报错:ClassLoader返回null致空指针异常
问题解决步骤
1. 修复类加载器空指针问题
你当前代码里的GetHangmanWords.class.getClass().getClassLoader()是错误写法:GetHangmanWords.class是当前类的Class对象,调用.getClass()会拿到Class<Class>的对象,它的类加载器是启动类加载器(Bootstrap ClassLoader),返回值为null,因此触发空指针异常。
正确的资源流获取方式有两种:
- 用当前类的类加载器:
GetHangmanWords.class.getClassLoader().getResourceAsStream("words.txt") - 直接用类对象的
getResourceAsStream方法(更推荐,无需处理类加载器为null的情况):GetHangmanWords.class.getResourceAsStream("/words.txt")。注意路径前加/表示从类路径根目录查找;如果不加/,则从当前类所在包路径下查找。
2. 修复文件读取跳过行的问题
你当前的while循环逻辑会跳过一半内容:
while (reader.readLine() != null) { lines.add(reader.readLine()); }
每次循环调用两次readLine(),第一次用于判断非空,第二次才添加到集合,导致偶数行被跳过。正确写法是把读取的行存入变量:
String line; while ((line = reader.readLine()) != null) { lines.add(line); }
3. 修复数组转换类型错误
lines.toArray()返回的是Object[],直接强转String[]会抛出ClassCastException,正确方式是调用toArray(new String[0]),让集合返回指定类型的数组。
修复后的完整代码
GetHangmanWords.java
package hangman; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; public class GetHangmanWords { public static String[] get() throws IOException { // 从类路径根目录读取文件 InputStream in = GetHangmanWords.class.getResourceAsStream("/words.txt"); // 先判断流是否为空,避免后续操作空指针 if (in == null) { throw new IOException("未找到文件words.txt"); } // 使用try-with-resources自动关闭流,避免资源泄漏 try (InputStreamReader inReader = new InputStreamReader(in); BufferedReader reader = new BufferedReader(inReader)) { ArrayList<String> lines = new ArrayList<>(); String line; while ((line = reader.readLine()) != null) { lines.add(line); } return lines.toArray(new String[0]); } } }
文件放置位置说明
确保words.txt放在类路径根目录:
- 普通Java项目:直接放在
src文件夹根目录(编译后会自动复制到bin目录根路径) - Maven/Gradle项目:放在
src/main/resources文件夹下(编译后会复制到类路径根目录)
测试代码(可直接使用)
package hangman; import java.io.IOException; public class Test { public static void main (String [] args) throws IOException { String[] words = GetHangmanWords.get(); // 打印结果验证 for (String word : words) { System.out.println(word); } } }
内容的提问来源于stack exchange,提问作者Dante_05
相关产品推荐
相关产品推荐

