Bufferedreader和InputStreamReader

问题描述:

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

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) 

不知道我在做什么错误/丢失。

+0

您应该在尝试处理之前打印'input' - 您可能会对其内容感到惊讶。 – alfasin

+1

您试图将文件名解析为'long'。解决方案:不要。 NB'readLine()'不'直到文件结尾读取第一行'。你为什么试图首先将文本文件解析为'longs'? – EJP

+0

我需要分析多头,因为我有另一种方法,我将十进制数转换为基地 –

当我尝试使用文本文件

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

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

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