You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Scanner读取文件报错求助:远程整数文件修改流程异常

问题分析与解决方案

你的代码里有几个关键问题导致Scanner读不到文件内容,我逐个给你拆解:

1. 异步执行shell脚本,未等待下载完成

Runtime.getRuntime().exec("/home/ayyuce/Desktop/download.sh")是异步执行的——Java会启动新进程跑脚本,但不会等脚本执行完就继续往下走。这时候下载脚本可能还没把文件下载好,你就已经开始用Scanner读文件了,自然读不到内容。

解决方法:获取exec返回的Process对象,调用waitFor()阻塞当前线程,直到脚本执行完成。

2. 提前用PrintWriter清空了文件

你在读取文件之前就执行了PrintWriter pw = new PrintWriter(f);——这个构造函数会直接覆盖并清空目标文件,哪怕文件之前有内容,到Scanner读取的时候已经是空的了,必然会走到else分支输出Error。

解决方法:先完成文件读取和数值计算,再创建PrintWriter写入新内容。

3. 数值增值的逻辑错误

int increase=num++;是后自增操作,increase的值等于原来的num,并没有实现增值效果。应该用int increase = num + 1;或者int increase = ++num;(前自增)。

4. 资源管理不规范

你现在的代码关闭资源的顺序不合理,且没有处理异常场景,最好用try-with-resources语法自动管理资源,避免资源泄漏。


修正后的代码

import java.io.*;
import java.util.*;

public class Shell { // 类名首字母大写,符合Java编码规范
    public static void main(String[] args) throws IOException, InterruptedException {
        // 执行下载脚本并等待完成
        Process downloadProcess = Runtime.getRuntime().exec("/home/ayyuce/Desktop/download.sh");
        downloadProcess.waitFor(); // 阻塞直到下载脚本执行完毕

        File f = new File("/home/ayyuce/Desktop/yeni.txt");
        int num = 0;

        // 先读取文件中的整数
        try (Scanner s = new Scanner(f)) { // try-with-resources自动关闭Scanner
            if (s.hasNextInt()) { // 直接判断是否有有效整数,比hasNextLine更精准
                num = s.nextInt();
            } else {
                System.out.println("Error: 文件中没有有效的整数");
                return; // 读取失败直接退出,避免后续无效操作
            }
        }

        // 计算增值后的数值
        int increase = num + 1;

        // 写入新数值到文件
        try (PrintWriter pw = new PrintWriter(f)) { // try-with-resources自动关闭PrintWriter
            pw.println(increase);
        }

        // 执行上传脚本并等待完成
        Process uploadProcess = Runtime.getRuntime().exec("/home/ayyuce/Desktop/upload.sh");
        uploadProcess.waitFor();
    }
}

额外小建议

  • 执行shell脚本时,可以读取脚本的输出和错误流(比如downloadProcess.getInputStream()和getErrorStream()),方便排查脚本执行是否出问题
  • 尽量遵循Java编码规范,比如类名首字母大写,代码适当换行缩进,提升可读性

内容的提问来源于stack exchange,提问作者Ayyuce Demirbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:44:11