加载远程URL时出现java.io.FileNotFoundException错误

时间:2013-10-12 12:10:28

标签: java java-io

我正在尝试将cdv文件读入我在mac上用eclipse编写的java程序中。当我从计算机上的目录中读取文件时,这可以正常工作,但我想从网上读取一个csv文件(在我的案例中是Yahoo Finance)。这在PC上完全正常,因此可能与Mac相关。我已经测试了一些不同的选项,使用反斜杠,多个反斜杠等但我无法使它工作,所以我转向你聪明的人在这里。

这是我的代码:

public void run() {

          String csvFile = "http://ichart.finance.yahoo.com/table.csv?s=SPHS&a=05&b=9&c=2013&d=09&e=12&f=2013&g=d&ignore=.csv";
          System.out.println(csvFile);
          BufferedReader br = null;
          String line = "";
          String csvSplitBy = ",";

          try {

              br = new BufferedReader(new FileReader(csvFile));
              while ((line = br.readLine()) != null) {

                  String[] output = line.split(csvSplitBy);

                  System.out.println("On "+output[0]+" Closing price was: "+output[6]);
              }
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          } catch (IOException e){
              e.printStackTrace();
          } finally {
              if (br != null) {
                  try {
                      br.close();
                  }catch (IOException e) {
                      e.printStackTrace();
                  }
              }
          }

          System.out.println("Done!");

      }

这是我得到的错误和输出:

http:\\ichart.finance.yahoo.com\table.csv?s=SPHS&a=05&b=9&c=2013&d=09&e=12&f=2013&g=d&ignore=.csv
java.io.FileNotFoundException: http:\\ichart.finance.yahoo.com\table.csv?s=SPHS&a=05&b=9&c=2013&d=09&e=12&f=2013&g=d&ignore=.csv (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:120)
    at java.io.FileInputStream.<init>(FileInputStream.java:79)
    at java.io.FileReader.<init>(FileReader.java:41)
    at ReadCSV.ReadCSV.run(ReadCSV.java:28)
    at ReadCSV.ReadCSV.main(ReadCSV.java:13)
Done!

2 个答案:

答案 0 :(得分:2)

您无法使用FileReader从远程网址获取内容。

您可以使用URL类:

URL url = new URL("http://ichart.finance.yahoo.com/table.csv?s=SPHS&a=05&b=9&c=2013&d=09&e=12&f=2013&g=d&ignore=.csv");
InputStream is = url.openStream();
// Read URL's  content from `is`
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

这个问题与Mac OS Eclipse无关。您将在每个平台上收到相同的错误。

答案 1 :(得分:1)

new FileReader(csvFile)

那不是本地文件。创建一个URL对象:

URL url=new URL("http://ichart.finance.yahoo.com/table.csv?s=SPHS&a=05&b=9&c=2013&d=09&e=12&f=2013&g=d&ignore=.csv");

并加载:

br=new BufferedReader(new InputStreamReader(url.openStream()));