【问题标题】:Bufferedreader and InputStreamReaderBufferedreader 和 InputStreamReader
【发布时间】:2017-10-12 23:53:07
【问题描述】:

我无法让我的 java 程序读取任何文本文件。

public static void main(String[] args) throws java.io.IOException {

        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);

        try {
            long base = Long.parseLong(args[0]);

            String input = br.readLine(); //read first line till the end of file

            long list = Long.parseLong(input);

            convertBase(base, list);
        }
        finally {
            br.close();
        }
}

当我在命令行中手动输入值时程序可以工作,但是当我尝试使用文本文件时它会抛出异常:

Exception in thread "main" java.lang.NumberFormatException: For input string: "baseconverion.txt"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:589)
at java.lang.Long.parseLong(Long.java:631)
at FromDecimal.main(FromDecimal.java:46)

不确定我做错了什么/错过了什么。

【问题讨论】:

  • 您应该在尝试处理它之前打印input - 您可能会对它的内容感到惊讶。
  • 您正在尝试将文件名解析为long。解决方案:不要。 NB readLine() 不会“读取第一行直到文件末尾”。您为什么首先尝试将文本文件解析为longs
  • 我需要解析为 long,因为我有另一种方法可以将十进制数转换为基数
  • 解析为 long 会转换为 binary,而不是十进制,但您不需要将 filename 解析为 long。您的输入和参数以某种方式混合在一起。注意这里没有任何东西可以读取文本文件。

标签: bufferedreader inputstreamreader


【解决方案1】:

当我尝试使用文本文件时

您的意思是“当我输入文件名而不是数字时”。您根本没有“尝试[ing]”使用文本文件。您所做的只是在控制台输入文件名。这里没有任何东西可以打开或读取文本文件。 Java 并不神奇:它不会神奇地意识到这是一个文件名并神奇地为您打开它。

您需要阅读 Java 教程和 Javadoc 中有关文件 I/O 的内容。

如果您的目标是将十进制转换为另一个基数,您也不应该使用Long.parseLong()。您需要将原始行传递给您的转换方法。

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 2015-02-24
    • 2015-10-27
    • 2018-05-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2011-06-11
    相关资源
    最近更新 更多