尝试创建文件失败且报错,求教Java try-catch用法及问题排查
帮你解决文件创建失败+理解try-catch的问题
嘿,我来帮你理清楚当前的问题~ 首先看你写的代码,它的作用是读取一个叫Skill.txt的文件,而不是创建文件——这就是你尝试创建文件却没成功的核心原因哦!
先拆解你的原代码问题
你这段代码里,new Scanner(file)是尝试打开文件来读取,但如果这个文件根本不存在,就会触发FileNotFoundException,这时候你的catch块会捕获这个异常并打印错误信息,但不会帮你创建新文件。
再给你讲明白try-catch的基础用法
try-catch是Java里处理异常的基本方式,简单来说:
- try块:把那些可能会出错的代码(比如操作文件、网络请求)放在这里,程序会尝试执行这些代码
- catch块:如果try里的代码抛出了指定类型的异常,程序就会跳到对应的catch块里执行处理逻辑(比如提示用户、修复问题)
比如你的代码里,读取文件可能会因为文件不存在抛出异常,所以把读取逻辑放在try里,用catch来捕获这个异常。
修改后的代码:包含创建文件+正确的异常处理
咱们把代码改成既能创建文件(如果不存在),又能读取,还能正确处理异常的版本:
import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; public class FileDemo { public static void main(String[] args) { File file = new File("Skill.txt"); Scanner new_sc = null; try { // 先检查文件是否不存在,如果不存在就创建 if (!file.exists()) { // createNewFile()会返回boolean,表示是否创建成功 boolean isCreated = file.createNewFile(); if (isCreated) { System.out.println("文件创建成功啦!"); } else { System.out.println("文件创建失败,可能是权限问题或者路径错误~"); } } // 现在尝试读取文件 new_sc = new Scanner(file); while (new_sc.hasNextLine()) { System.out.println(new_sc.nextLine()); } } catch (FileNotFoundException e) { // 捕获文件找不到的异常(虽然我们先创建了,但还是要处理极端情况) System.out.println("读取文件时出错:找不到文件"); e.printStackTrace(); } catch (IOException e) { // 捕获创建文件时可能出现的IO异常(比如权限不足) System.out.println("创建文件时出错"); e.printStackTrace(); } finally { // finally块里的代码不管有没有异常都会执行,用来关闭资源 if (new_sc != null) { new_sc.close(); } } } }
额外的小提示
- 文件路径问题:如果用相对路径
"Skill.txt",文件会创建在你的Java程序运行的当前工作目录下(比如IDE的项目根目录) - 自动关闭资源:Java 7及以上可以用try-with-resources语法,不用手动关闭Scanner,代码会更简洁:
try (Scanner new_sc = new Scanner(file)) { while (new_sc.hasNextLine()) { System.out.println(new_sc.nextLine()); } } - 权限问题:如果创建文件失败,大概率是当前程序没有对应目录的写入权限,这时候要检查路径或者调整权限。
内容的提问来源于stack exchange,提问作者DDSasikala
相关产品推荐
相关产品推荐

