当前位置: 代码迷 >> java >> 文件解析代码为我提供了异常而不是数字,文件写入代码为我提供了乱码而不是数字
  详细解决方案

文件解析代码为我提供了异常而不是数字,文件写入代码为我提供了乱码而不是数字

热度:45   发布时间:2023-07-17 21:07:17.0

这段代码读取了一个记事本文件,该记事本文件上的数字为10,由于某种原因它返回一个乱码而不是10,我认为这是ascii代码,但我不知道,而且此代码是从我的编程老师代码中修改的,所以我不要为此而功劳

/**
     *Goes in to the file and extracts a number.
     * @param fileName
     * @return an integer
     */
    static int getNumberFromFile(String fileName){
        int j = 599;
        try {
            File textFile = new File(fileName);
            Scanner sc = new Scanner(textFile);
            String input = sc.nextLine();
            j = Integer.parseInt(input);

        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
        return j;

    }

引发此更奇怪的异常异常:java.lang.NumberFormatException:对于输入字符串:“ 10”和此代码

/**
 * writes data for the ai to adapt its strategy
 *@param number is the number to write
 * @param fileName is the fileName
 */
public static void writeToFile(String fileName,int number) {

    BufferedWriter output = null;
    try {
        File aFile = new File(fileName);
        FileWriter myWriter = new FileWriter(aFile);
        output = new BufferedWriter(myWriter);
        output.write(number);
        output.newLine();
        output.close();
    } catch (Exception e) {
        System.out.println("Exception:" + e);
        System.out.println("please Report this bug it doesnt understand");
        System.exit(1);
    }
}

不用担心某些异常捕获的东西,这些东西让我看看是否捕获到异常,它只是打印一条(废话)消息。 以及一些有关AI的讨论不用担心的东西只需要此代码即可工作,我可以发布为什么AI需要它,但我认为它不相关

该行不符合您的期望:

output.write(number);

它在BufferedWriter上调用write ,因此您应该查阅 ...在这一点上您发现您正在调用 。

 public void write(int c) throws IOException 

写一个字符。

覆写:
writeWriter参数:
c指定要写入的字符的int

write链接之后提供了更多详细信息:

写一个字符。 给定整数值的16个低位包含在要写入的字符中。 16个高位被忽略。 打算支持有效的单字符输出的子类应重写此方法。

因此,您正在编写Unicode字符U + 000A-或如果该值确实为10。我强烈怀疑不是,因为那只是换行符。

如果您尝试编写数字的十进制表示,则应首先将其转换为字符串:

output.write(String.valueOf(number));
  相关解决方案