首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何防止Java程序退出NumberFormatException?

如何防止Java程序退出NumberFormatException?
EN

Stack Overflow用户
提问于 2018-08-27 05:41:44
回答 2查看 0关注 0票数 0

我正在用Java编写一个程序,只读取输入文件的内容并将内容写入另一个文件,程序将读入并写出整数,并将跳过其他所有内容,遇到的问题是程序将在读取非整数时退出,需要程序读取所有整数,跳过其他所有内容并继续读取整数,并将所有整数写入文件并将非整数回显到终端

输入文件包含以下内容:

代码语言:javascript
复制
2
1023
-56
84781
0
-9371
Rats
10
5

该文件是一个二进制文件,当我运行'od outputFileName.bin'时,会显示在终端:

代码语言:javascript
复制
0000000 000000 002400
0000004

如果我使用更改代码写入文本文件

代码语言:javascript
复制
input.nextLine();
output.println(line);

这是我的代码:

代码语言:javascript
复制
import java.io.*;
import java.util.Scanner;

class DataTranslator {

    public static void main(String[] args) {
        Scanner input = null;
        Scanner user = null;

        PrintWriter output = null;

        String inputFileName;
        String outputFileName;

        try {
            // Create a Scanner for user input
            user = new Scanner(System.in);

            // Prepare the input file
            System.out.print("Input File --> ");
            inputFileName = user.nextLine().trim();
            File file = new File(inputFileName);
            input = new Scanner(file);

            // Prepare the output file
            System.out.print("Output File --> ");
            outputFileName = user.nextLine().trim();
            output = new PrintWriter(outputFileName);
        } catch (IOException e) {
            System.out.println("Problem opening file.");
            System.out.println(e.getMessage());
            if (input != null)
                input.close();
            if (output != null)
                output.close();
            if (user != null)
                user.close();
            return;
        }

        // processing loop
        try {
            // for each line of input
            while (input.hasNextLine()) {
                int line = Integer.parseInt(input.nextLine().trim()); 
                // input.nextLine();
                // output.println(line);
                DataOutputStream dataOut = new DataOutputStream(
                        new BufferedOutputStream(new FileOutputStream(outputFileName)));
                dataOut.writeInt(line);
                System.out.println(line);
                dataOut.close();
            }
        } catch (IOException e) {
            System.out.println("File I/O Error");
            System.err.println(e.getMessage());
        } catch (NumberFormatException e) {
            System.out.print("Poor input data ");
            System.err.println(e.getMessage() + ", this will not work");
            // e.printStackTrace();
        } finally {
            // close the files
            if (input != null)
                input.close();
            if (output != null)
                output.close();
            if (user != null)
                user.close();
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-08-27 14:20:07

只需将CATCH子句添加到尝试-CATCH块中即可,所以你的应用程序不会破坏数字格式的异常

代码语言:txt
复制
try {
    // Create a Scanner for user input
    user = new Scanner(System.in);
    // Prepare the input file
    System.out.print("Input File --> ");
    inputFileName = user.nextLine().trim();
    File file = new File(inputFileName);
    input = new Scanner(file);

    // Prepare the output file
    System.out.print("Output File --> ");
    outputFileName = user.nextLine().trim();
    output = new PrintWriter(outputFileName);
} catch (NumberFormatException ex) {
    // ignore exception or whatever you want
} catch (IOException e) {
    System.out.println("Problem opening file.");
    System.out.println(e.getMessage());
    if (input != null)
        input.close();
    if (output != null)
        output.close();
    if (user != null)
        user.close();
    return;
}
票数 0
EN

Stack Overflow用户

发布于 2018-08-27 15:06:18

试试以下代码:

代码语言:txt
复制
while (input.hasNextLine()) {
     try {
         int line = Integer.parseInt(input.nextLine().trim());
         DataOutputStream dataOut = new DataOutputStream(
         new BufferedOutputStream(new FileOutputStream(outputFileName)));
         dataOut.writeInt(line);
         System.out.println(line);
         dataOut.close();
         }catch(NumberFormatException ne){
            continue;
         }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档