2013-04-21 6 views
7

मेरे पास ऐसी विधि है जो फ़ाइल को कुछ डेटा लिखती है। मैं PrintWriter, BufferedWriter और FileWriter का उपयोग के रूप में नीचेजावा - जब मैंने प्रिंटवाइटर, BufferedWriter और FileWriter को लिखने के लिए फ़ाइल से कैसे पढ़ा है?

public void writeToFile(String FileName){ 
    PrintWriter pw = null; 
    try { 
     pw = new PrintWriter(new BufferedWriter(new FileWriter(FileName))); 
     for(Cars car : list){ 
      pw.println(car.getType()); 
      pw.println(car.getMaxSpeed()); 
      pw.println(car.getOwner()); 
      pw.println(); 
      pw.flush(); 
     } 
     pw.close(); 
    } 
    catch(IOException ex){ 
     System.err.println(ex); 
    } 
} 

अब मैं फ़ाइल से इस डेटा पढ़ सकते हैं कैसे पता चला? मैं InputStreamReader, BufferedReader और FileInputStream का उपयोग करने की कोशिश की, लेकिन मेरे NetBeans मुझे एक त्रुटि संदेश

public void readFromFile() throws IOException { 
     InputStreamReader fr = null; 
     try { 
      fr = new InputStreamReader(new BufferedReader(new FileInputStream(new FileReader("c:\\cars.txt")))); 
      System.out.println(fr.read()); 
     } catch (Exception ex) { 
      System.out.println(ex.getMessage()); 
     } finally { 
      fr.close(); 
     } 
    } 

से पता चलता क्या इस विधि के साथ गलत क्या है?

1) एक InputStreamReader नहीं एक तर्क एक रीडर के रूप में एक InputStream लेता है:

उत्तर

14
BufferedReader in = new BufferedReader(new FileReader("file.in")); 
FileWriter fstream = new FileWriter("file.out"); 
BufferedWriter out = new BufferedWriter(fstream); 

String line = in.readLine(); // <-- read whole line 
StringTokenizer tk = new StringTokenizer(line); 
int a = Integer.parseInt(tk.nextToken()); // <-- read single word on line and parse to int 

out.write(""+a); 
out.flush(); 
2

अपने कोड में कई समस्याएं हैं। http://docs.oracle.com/javase/6/docs/api/java/io/InputStreamReader.html देखें।

2) FileInputStream एक पाठक को तर्क के रूप में भी स्वीकार नहीं करता है (यह एक फ़ाइल, एक फ़ाइल डिस्क्रिप्टर, या एक स्ट्रिंग लेता है)। देखें: http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html

3) एक BufferedReader सामान्य रूप से फ़ाइल लाइन को फ़ाइल लाइन को पढ़ता है। पढ़ा() विधि केवल एक वर्ण पढ़ता है।

सम्भावित समाधान हो सकता है:

fr = new BufferedReader(new InputStreamReader(new FileInputStream(new File("c:\\cars.txt")))); 
String line = ""; 
while((line = fr.readLine()) != null) { 
    System.out.println(line); 
} 

Btw: यह आसान दूसरों तुम्हारी मदद करने के लिए हो सकता है, अगर आप सटीक त्रुटि संदेश या और भी बेहतर StackTrace प्रदान करते हैं।

+0

आपको बहुत बहुत धन्यवाद। अब यह पूरी तरह से काम करता है ... :) – marek

0

सरल त्रुटि: कन्स्ट्रक्टर 'FileInputStream (java.io.FileReader)' को हल नहीं कर सकता, आवश्यक कन्स्ट्रक्टर एपीआई में मौजूद नहीं है।

आप मूल कोड था:

new PrintWriter(new BufferedWriter(new FileWriter(FileName))); 

तो पढ़ने के लिए आप

new PrintReader(new BufferedReader(new FileReader(FileName))); 

की जरूरत है लेकिन PrintReader की जरूरत नहीं है (मौजूद नहीं), इसलिए आप सभी की जरूरत है:

new BufferedReader(new FileReader(FileName)) 

प्रिंटरवाइटर ऑब्जेक्ट्स के स्वरूपित प्रस्तुतियों को टेक्स्ट-आउटपुट स्ट्रीम में मुद्रित करता है, लेकिन पाठ पढ़ने पर हमेशा स्वरूप होता है एड, तो प्रिंटर रीडर मौजूद नहीं है।

तुम भी लाइन द्वारा :) उदाहरण लाइन द्वारा लाइन है, तो पढ़ लाइन लिख रहे हैं:

public void readFromFile() throws IOException { 
    BufferedReader bufferedReader = null; 
    try { 
     String sCurrentLine; 
     bufferedReader = new BufferedReader(new FileReader("c:\\cars.txt")); 
     while ((sCurrentLine = bufferedReader.readLine()) != null) { 
      System.out.println(sCurrentLine); 
     } 
    } catch (Exception ex) { 
     System.out.println(ex.getMessage()); 
    } finally { 
     bufferedReader.close(); 
    } 
} 

या बेहतर (JDK7)

void readFromFile() throws IOException { 
    Path path = Paths.get("c:\\cars.txt"); 
    try (BufferedReader reader = Files.newBufferedReader(path, Charset.defaultCharset())){ 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      System.out.println(line); 
     } 

    } 
} 
संबंधित मुद्दे