当前位置: 首页 > 知识库问答 >
问题:

在Java中读/写数字--然后在转换时读/写NumberFormatException

汪臻
2023-03-14
static public void putContents(File aFile, String content, boolean append) {

    // init
    Writer writer = null;

    // make sure file exists
    if (!aFile.exists()) {
        Util.createFile(aFile.getAbsolutePath());
    }

    // write content
    try {
        writer = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(aFile), "UTF-8"));
        writer.write(content);
        writer.close();
    } catch (IOException e) {
        logger.error("Error writing content to file: " + aFile);
    } finally {
        try {
            // Close the writer regardless of what happens
            writer.close();
        } catch (Exception e) {
            logger.error("Error while closing file: " + aFile.getAbsolutePath());
        }
    }

}

static public void createFile(String filename) {

    // protection against accidental overwrite
    if (new File(filename).exists()) {
        logger.warn("File '" + filename + "' already exists. Nothing done.");
        return;
    }

    // create file with directory structure
    File targetFile = new File(filename);
    File parent = targetFile.getParentFile();
    if (!parent.exists() && !parent.mkdirs()) {
        throw new IllegalStateException("Couldn't create dir: " + parent);
    }

    try {
        targetFile.createNewFile();
    } catch (IOException e){
        logger.error("Error while creating empty file '" + filename + "': " + e.getMessage());
    }

}

static public String getContents(File aFile) {

    StringBuilder contents = new StringBuilder();

    try {
        // extract all text from this file
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(aFile), "UTF-8"));
        try {

            String line = null; //not declared within while loop
            while ((line = reader.readLine()) != null) {
                contents.append(line);
                contents.append(System.getProperty("line.separator"));
            }
        } finally {
            reader.close();
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }

    return contents.toString();
}

下面是如何生成异常的:

public static void main(String[] args) {

    putContents(new File("D:/TEST.TXT"), "122", false);
    String numberString = Util.getContents(new File("D:/TEST.TXT"));

    logger.info("String: " + numberString);
    logger.info("String converted to number: " + Integer.parseInt(numberString));

}

此处输出:

16:28:05,109 INFO  [main] [Util] String: 122
Exception in thread "main" java.lang.NumberFormatException: For input string: "122"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at at.tuwien.mucke.util.Util.main(Util.java:154)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Process finished with exit code 1

共有1个答案

阳航
2023-03-14

方法getContents在返回值中添加新行。这导致该方法返回122\r\n

contents.append(System.getProperty("line.separator"));

如果要删除新行,可以使用:

System.out.println("String converted to number: " + Integer.parseInt(numberString.replaceAll("\r\n", "")));

或者可以使用

System.out.println("String converted to number: " + Integer.parseInt(numberString.replaceAll("\\s", "")));
 类似资料:
  • 我正在逐行读取一个文件,并试图使它符合特定参数的行(在我的例子中,如果它以某个单词开头),我可以覆盖该行。 谢了!

  • 我有关于在JTextField打字的问题。我的程序搜索通过几个csv文件和寻找指定的JTextField字符串。我有添加到readLine函数". toLowerCase"读取所有字符串作为小写。在写入JTextField时,是否可以将JTextField设置为自动将大写转换为小写? if(line.toLowerCase()。包含(searchedString))

  • 问题内容: 我正在使用MySql DB,并且希望能够读取和写入unicode数据值。例如,法语/希腊语/希伯来语值。 我的客户端程序是C#(.NET Framework 3.5)。 如何配置数据库以允许unicode?以及如何使用C#从MySql读取/写入Unicode值? 更新日期:09年9月7日 好的,因此我的架构,表和列设置为’utf8’+排序规则’utf8_general_ci’。打开连接

  • 问题内容: 我想将字符串的第一个字符转换为大写,并将其余字符转换为小写。我该怎么做? 例: 问题答案: 尝试以下尺寸: 基本上,它首先处理空字符串和一个字符字符串的特殊情况,否则正确处理一个两字符以上的字符串。而且,正如评论中指出的那样,功能不需要使用一个字符的特殊情况,但我仍然希望明确,特别是如果它导致更少的无用调用(例如子字符串以获取空字符串),小写字母它,然后附加它。

  • df.write.format(“jdbc”)。选项(

  • 问题 你想读写二进制文件,比如图片,声音文件等等。 解决方案 使用模式为 rb 或 wb 的 open() 函数来读取或写入二进制数据。比如: # Read the entire file as a single byte string with open('somefile.bin', 'rb') as f: data = f.read() # Write binary data to

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 7年前关闭。 改善这个问题 我正在开发一个名为LMCT(Let Me Copy That)的应用程序,它是用Java编程的,我只需要知道如何从Java刻录到DVD / CD。 任何示例,欢迎使用API​​或链接。 问题答案: 我已经使用COM4J和IMAP

  • 问题内容: 下面的Go代码读取10,000条记录的CSV(时间戳和浮点数),对数据进行一些操作,然后将原始值以及的附加列写入到另一个CSV中。但是,它的运行速度非常慢(例如,数小时,但大部分时间是),我很好奇我可以处理的CSV读取/写入是否效率低下。 我正在寻求帮助,以使此CSV读/写模板代码尽快。对于此问题的范围,我们不必担心该方法。 问题答案: 您先将文件加载到内存中,然后再对其进行处理,这对