读取含ID的文本文件遇异常,咨询无需全路径的文件放置位置
解决文件路径与IO异常问题
看起来你在处理文件读取时碰到了路径找不到和IO异常的问题,我来帮你理清楚q.txt该放哪儿,以及怎么顺利读取内容到TextView里~
不同项目类型的文件放置位置
程序的相对路径是基于工作目录(也就是程序启动时的默认路径)来解析的,不同类型的项目工作目录不一样,对应文件的正确放置位置也不同:
1. 普通Java SE项目(IDEA/Eclipse等)
- 最简单的方式:把
q.txt直接放在项目根目录(和src文件夹平级的位置),这样直接用new File("q.txt")就能找到文件,不用写完整路径。 - 更稳妥的方式(适合打包成JAR后也能读取):把文件放在
src目录下,用类加载器读取:InputStream inputStream = YourCurrentClass.class.getResourceAsStream("/q.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
2. Android项目
Android不能直接用普通File类读取打包的文件,分两种场景:
- 随APK打包的只读文件:把
q.txt放在src/main/assets目录下,用AssetManager读取:AssetManager assetManager = getAssets(); BufferedReader reader = new BufferedReader(new InputStreamReader(assetManager.open("q.txt"))); - 需要读写的文件:放在App的内部存储目录,用
getFilesDir()获取路径,再创建文件:File file = new File(getFilesDir(), "q.txt");
3. Java Web/Spring Boot项目
- Spring Boot:把
q.txt放在src/main/resources目录下,用类路径读取:File file = ResourceUtils.getFile("classpath:q.txt"); - 普通Tomcat Web项目:放在
WEB-INF/classes目录下,或者通过ServletContext获取真实路径:String realPath = getServletContext().getRealPath("/q.txt"); File file = new File(realPath);
顺便解决IO异常的小技巧
记得用try-with-resources语法,它会自动关闭流,避免资源泄漏,同时也能更好地处理IO异常:
try (BufferedReader br = new BufferedReader(new FileReader("q.txt"))) { String line; while ((line = br.readLine()) != null) { // 分割每行的ID和字符串 String[] parts = line.split(","); if (parts.length == 2 && parts[0].equals(yourTargetId)) { textView.setText(parts[1]); // 找到对应ID的字符串,设置到TextView break; // 找到就停止遍历,提升效率 } } } catch (IOException e) { e.printStackTrace(); // 这里可以给用户显示"文件读取失败"的提示 }
内容的提问来源于stack exchange,提问作者Akrilic
相关产品推荐
相关产品推荐

