2012-09-07 60 views
-1

嘗試創建兩種方法來計算no。的行和讀取文件的值,只有其中一個方法得到執行,另一個不執行,顯示以下錯誤:線程「主」java.lang.RuntimeException異常:java.io.IOException:讀取錯誤無法在java中創建兩種單獨計算和讀取文件的方法

請看下面的代碼:

package com.ibm.csvreader; 
import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.*; 
import java.io.*; 

public class CsvFileReader2 { 

    public static class opencsvfile { 

     HashMap <String , String> map= new HashMap <String, String>(); 
     //csv file containing data 
     // FileReader strFile = new FileReader("C:/Users/vmuser/Desktop/SampleUpload.csv"); 
      //create BufferedReader to read csv file 

     // BufferedReader br = new BufferedReader((strFile)); 
      String strLine = ""; 
      int lineNumber ; 
     public void countrows(FileInputStream fstream) throws Exception{ 
      DataInputStream strFile = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader (strFile)); 
       lineNumber =0; 
      while((strLine = br.readLine()) != null) { 
        lineNumber++; 
       } 
      System.out.println("no.of rows are :" +lineNumber); 
      br.close(); 
     } 
      public void readfile(FileInputStream fstream) throws Exception{ 
       DataInputStream strFile = new DataInputStream(fstream); 
       BufferedReader br = new BufferedReader(new InputStreamReader (strFile)); 
       lineNumber =0; 
       while((strLine = br.readLine()) != null) { 
         lineNumber++; 
         String[] tokens = strLine.split(","); 
         String key = tokens[0].trim(); 
         String nodes = tokens[1].trim(); 
         map.put(key, nodes); 

          } 
       System.out.println("map is" + map); 
       br.close(); 
        System.out.println("File is Closed"); 
     } 
    } 
    public static void main(String[] args) throws IOException { 
     File fl = new File ("C:/Users/vmuser/Desktop/SampleUpload.csv"); 
     FileInputStream fstream = new FileInputStream(fl); 

     opencsvfile f=new opencsvfile(); 
     try { 
      f.countrows(fstream); 

      f.readfile(fstream); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 


    } 

     } 
+6

張貼代碼 –

+0

向我們展示代碼!!! –

+1

在調用第二個方法之前,你有沒有在第一種方法中關閉文件? –

回答

0

只是一個小修改將做的工作:

package com.ibm.csvreader; 
import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.*; 
import java.io.*; 

public class CsvFileReader2 { 



    public static class opencsvfile { 

     HashMap <String , String> map= new HashMap <String, String>(); 
     //csv file containing data 
     // FileReader strFile = new FileReader("C:/Users/vmuser/Desktop/SampleUpload.csv"); 
      //create BufferedReader to read csv file 

     // BufferedReader br = new BufferedReader((strFile)); 
      String strLine = ""; 
      int lineNumber ; 
     public void countrows(FileInputStream fstream) throws Exception{ 
      DataInputStream strFile = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader (strFile)); 
       lineNumber =0; 
      while((strLine = br.readLine()) != null) { 
        lineNumber++; 
       } 
      System.out.println("no.of rows are :" +lineNumber); 
      br.close(); 
     } 
      public void readfile(FileInputStream fstream) throws Exception{ 
       DataInputStream strFile = new DataInputStream(fstream); 
       BufferedReader br = new BufferedReader(new InputStreamReader (strFile)); 
       lineNumber =0; 
       while((strLine = br.readLine()) != null) { 
         lineNumber++; 
         String[] tokens = strLine.split(","); 
         String key = tokens[0].trim(); 
         String nodes = tokens[1].trim(); 
         map.put(key, nodes); 

          } 
       System.out.println("map is" + map); 
       br.close(); 
        System.out.println("File is Closed"); 
     } 
    } 
    public static void main(String[] args) throws IOException { 
     File fl = new File ("C:/Users/vmuser/Desktop/SampleUpload.csv"); 
     FileInputStream fstream = new FileInputStream(fl); 

     opencsvfile f=new opencsvfile(); 
     try { 
      f.countrows(fstream); 

      fstream = new FileInputStream(fl);//include this line 

      f.readfile(fstream); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
     finally{ 
      if(fstream!=null) 
       fstream.close();//be sure to close all streams at last 
     } 


    } 

     } 

關閉所有其他流爲好。上面的代碼將爲你工作。乾杯。

+0

當我正在實施你的解決方案我有以下錯誤:線程「主」java.lang中的異常.RuntimeException:java.io.IOException的:在java.io.FileInputStream中讀取錯誤 \t:讀錯誤 \t在com.ibm.csvreader.CsvFileReader2.main(CsvFileReader2.java:87) 引起:java.io.IOException的.read(FileInputStream.java:224) \t在java.io.DataInputStream.read(DataInputStream.java:143) \t在sun.nio.cs.StreamDecoder $ CharsetSD.readBytes(StreamDecoder.java:464) \t在sun.nio.cs.StreamDecoder $ CharsetSD.implRead(StreamDecoder.java:506) – sandy444

+0

Hi Dangling,Thanks fo在這個幫助下,它解決了。 – sandy444

0

當你關閉你的BufferedReader時,它也會關閉嵌套類,包括FileInputStream。

而不是關閉它,你應該嘗試並重置()它重新開始讀它從一開始。

或者您必須重新打開FileInputStream。

+0

當執行你的解決方案時,我得到以下錯誤:線程「主」java.lang.RuntimeException異常:java.io.IOException:流未標記 \t at com.ibm.csvreader.CsvFileReader2.main(CsvFileReader2.java:83) 產生的原因:產生java.io.IOException:在java.io.BufferedReader.reset(BufferedReader.java:496) \t在com.ibm.csvreader.CsvFileReader2 $ opencsvfile.readfile(CsvFileReader2.java:68流沒有標明 \t ) \t at com.ibm.csvreader.CsvFileReader2.main(CsvFileReader2.java:80) – sandy444

相關問題