springboot java.io.FileNotFoundException (拒绝访问。)问题

最近在学习springboot读入文件操作时,出现了文件读取拒绝访问的情况,google search了半天得到的结果大部分都是输入流问题,尝试了半天还是没有解决,我的源代码为:

 @PostMapping("upload")
    public String upload(MultipartFile file) throws IOException {
        InputStream inputStream = file.getInputStream();
        file.transferTo(new File("C:\\aaa"+ inputStream));
        return "上传成功";
    }

问题:

路径拼接错误:直接将 InputStream 对象拼接到路径字符串中,这会调用 toString() 方法,而返回的并不是有效的文件名。

文件操作不当transferTo() 方法需要正确构造的文件路径,才能将文件保存到目标位置。

改进后的代码:

    @PostMapping("upload")
    public String upload(@RequestParam("file") MultipartFile file) throws IOException {
        // 定义目标目录
        String targetDirectory = "C:\\aaa\\";

        // 确保目标目录存在
        File directory = new File(targetDirectory);
        if (!directory.exists()) {
            directory.mkdirs(); // 如果不存在则创建目录
        }

        // 获取文件的原始名称
        String originalFilename = file.getOriginalFilename();
        if (originalFilename == null || originalFilename.isEmpty()) {
            return "文件名无效";
        }

        // 拼接目标文件路径
        String targetFilePath = targetDirectory + originalFilename;

        // 将上传的文件保存到目标位置
        file.transferTo(new File(targetFilePath));

        return "上传成功";
    }

### 解决Spring Boot项目中导入XLS文件时出现的`java.io.FileNotFoundException` 当遇到`java.io.FileNotFoundException`异常时,通常意味着程序尝试访问不存在或无法找到的资源。对于Spring Boot应用程序,在处理Excel文件读取操作时可能会触发此错误。 #### 可能的原因 1. 文件路径不正确或文件名拼写有误。 2. 文件确实存在于指定位置,但由于权限问题而不可达。 3. 使用相对路径而非绝对路径来定位文件。 4. 应用程序运行环境中的类加载器未能正确解析资源路径[^1]。 #### 实现方案 为了确保能够成功读取并解析`.xls`格式的Excel文档,建议采用Apache POI库来进行操作: ```xml <!-- Maven依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.0.0</version> </dependency> ``` 下面是一个简单的例子展示如何利用POI读取本地磁盘上的.xls文件: ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.FileInputStream; import java.io.IOException; public class ExcelReader { public static void main(String[] args) { String filePath = "path/to/your/excel/file.xls"; try (FileInputStream fis = new FileInputStream(filePath); HSSFWorkbook workbook = new HSSFWorkbook(fis)) { // 进一步处理workbook对象... } catch (IOException e) { System.err.println("Failed to read the excel file."); e.printStackTrace(); } } } ``` 如果希望从classpath下获取资源,则可以这样做: ```java import org.springframework.core.io.ClassPathResource; // ... try (InputStream is = new ClassPathResource("excel/template.xls").getInputStream()) { Workbook wb = new HSSFWorkbook(is); } catch (Exception ex){ logger.error(ex.getMessage(), ex); } ``` 通过上述方法之一应该可以帮助克服因找不到目标文件而导致的`FileNotFoundException`问题。另外,请务必确认所使用的文件路径是准确无误的,并且应用具有足够的权限去访问该文件所在的位置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值