2012-10-03 5 views
8

में एक ही फ़ाइल से पढ़ने और लिखना मैं टोकन को उसी फ़ाइल के अंत में टोकननाइज़ और संलग्न करने के लिए criteria.txt फ़ाइल से पढ़ना चाहता हूं। कार्यक्रम एक अपवाद फेंकता है: No file found! मुझे नहीं पता कि मेरी गलती कहां है। कोई भी सुझाव मेरी मदद करेगा। आपका अग्रिम में ही बहुत धन्यवाद!जावा

यहाँ मेरी कोड है:

import java.io.*; 
import java.util.StringTokenizer; 

public class Test 
{ 
    private FileReader fr; 
    private BufferedReader br; 
    private FileWriter fw; 
    private BufferedWriter bw; 
    private StringTokenizer strtok; 
    private String s; 

    //constructor 
    public Test() 
    { 
     try 
     { 
      fw=new FileWriter("criteria.txt", true); 
      bw=new BufferedWriter(fw); 

      try 
      { 
       fr=new FileReader("criteria.txt"); 
       br=new BufferedReader(fr); 

       while((s=br.readLine())!=null) 
       { 
        strtok=new StringTokenizer(s," "); 
        while(strtok.hasMoreTokens()) 
        { 
         bw.write("\n"+strtok.nextToken()); 
        } 
        br.close(); 
       } 
      } 
      catch(FileNotFoundException e) 
      { 
       System.out.println("File was not found!"); 
      } 
      catch(IOException e)  
      { 
       System.out.println("No file found!"); 
      } 

      bw.close(); 
     } 
     catch(FileNotFoundException e) 
     { 
      System.out.println("Error1!"); 
     } 
     catch(IOException e)  
     { 
      System.out.println("Error2!"); 
     } 
    } 

    public static void main(String[] args) 
    { 
     Test t=new Test(); 
    } 
} 
+1

यदि आप ग्रहण का उपयोग कर रहे हैं, तो फ़ाइल को परियोजना की मूल निर्देशिका में होना आवश्यक है। –

+3

कोड की अपमानजनक रेखा को खोजने के लिए आपको स्टैक ट्रेस प्रिंट करना चाहिए। – Vulcan

+0

अपनी फाइल निर्देशिका – Abubakkar

उत्तर

8

के बाद आप जबकि पाश के बाद फ़ाइल अर्थात पढ़ने समाप्त कर दिया है अपने पाठकों को बंद करने की जरूरत है। वर्तमान में, आप पहली पंक्ति पढ़ने के बाद इसे बंद कर रहे हैं, जो दूसरी पंक्ति को पढ़ने का प्रयास करते समय "IOException: Stream closed" का कारण बनता है। आप ऐसा नहीं कर सकते

while((s=br.readLine())!=null) 
{ 
    strtok=new StringTokenizer(s," "); 
    while(strtok.hasMoreTokens()) 
    { 
     bw.write("\n"+strtok.nextToken()); 
    } 
    //br.close(); <----- move this to outside the while loop 
} 
br.close(); 
+0

धन्यवाद! यह अब काम कर रहा है। – Lavinia

0

मेरी राय में:

को बदलें। आप एक ही फाइल को एक ही समय में पढ़ने और लिखने के लिए नहीं खोल सकते हैं। आपको फ़ाइल की जानकारी को डेटा संरचना में खोलना और सहेजना होगा और फिर इसे बंद करना होगा। फिर आपको स्मृति में डेटा संरचना के साथ काम करना होगा और परिणाम लिखने के लिए फ़ाइल खोलना होगा। और जब आप लिखने के लिए खत्म करते हैं तो आपको इसे बंद करना चाहिए।

1

आपकी सबसे बड़ी पूर्ववत while() लूप के अंदर रख रही है: आप कंप्यूटर को प्रत्येक बार फ़ाइल को तुरंत बंद करने के लिए लिखते हैं, इसलिए फ़ाइल बंद रहती है और कंप्यूटर इसे अगले पुनरावृत्ति/निष्पादन के दौरान कभी नहीं ढूंढ पाएगा लूप का। हालांकि, मैं यह करने के लिए प्रारंभिक कार्यक्रम को संपादित किया है:

import java.io.*; 
import java.util.StringTokenizer; 

public class Test 
{ 
    private FileReader fr; 
    private BufferedReader br; 
    private FileWriter fw; 
    private BufferedWriter bw; 
    private StringTokenizer strtok; 
    private String s; 

    //constructor 
    public Test() 
    { 
     try 
     { 
      fw=new FileWriter("criteria.txt", true); 
      bw=new BufferedWriter(fw); 

      try 
      { 
       fr=new FileReader("criteria.txt"); 
       br=new BufferedReader(fr); 

       **while((s=br.readLine())!=null) 
       { 
        strtok=new StringTokenizer(s," "); 
        while(strtok.hasMoreTokens()) 
        { 
         bw.write("\n"+strtok.nextToken()); 
        } 

       } 
        br.close(); 
      }** 
      catch(FileNotFoundException e) 
      { 
       System.out.println("File was not found!"); 
      } 
      catch(IOException e)  
      { 
       System.out.println("No file found!"); 
      } 
      bw.close(); 
     } 
     catch(FileNotFoundException e) 
     { 
      System.out.println("Error1!"); 
     } 
     catch(IOException e)  
     { 
      System.out.println("Error2!"); 
     } 
    } 

    public static void main(String[] args) 
    { 
     Test t=new Test(); 
    } 
} 

फ़ोल्डर या निर्देशिका फ़ाइल मौजूद इस मामले में कोई फर्क नहीं पड़ता के रूप में कार्यक्रम एक ही फ़ोल्डर में एक नया "criteria.txt" नाम की फ़ाइल बनाएगा जावा कार्यक्रम के रूप में; हालांकि, आपको फ़ाइल को कुछ डेटा जोड़ने/जोड़ने के लिए एक टेक्स्ट एडिटर के साथ फाइल खोलनी होगी क्योंकि फ़ाइल प्रारंभ में रिक्त हो जाएगी। कार्यक्रम के बाद के भाग अब पहले से सम्मिलित सामग्री को एक नई लाइन पर एक संयोजन स्ट्रिंग के रूप में जोड़ देंगे। प्रत्येक बार प्रोग्राम चलाए जाने पर एक नई लाइन तैयार की जाएगी। उम्मीद है की यह मदद करेगा।