2015-09-29 4 views
5

मुझे पता है कि skip(long)FileInputStream फ़ाइल की प्रारंभिक स्थिति से बाइट्स छोड़ती है और फ़ाइल सूचक को स्थान देती है। लेकिन अगर हम फ़ाइल के बीच में केवल 20 वर्ण छोड़ना चाहते हैं, और फ़ाइल के शेष भाग को पढ़ने के लिए, हमें क्या करना चाहिए?आईओ जावा में छोड़ें() विधि?

+0

'skip' वर्तमान फ़ाइल स्थिति से काम करता है। पाठ के लिए एक पाठक का उपयोग करें (इनपुटस्ट्रीम रीडर ब्रिज बाइनरी बाइट यूनिकोड जावा टेक्स्ट में)। बफरिंग के लिए एक बुफर्ड ~ संस्करण का उपयोग करें। –

उत्तर

7

आपको BufferedReader का उपयोग करना चाहिए। इसकी skip विधि वर्ण छोड़ती है और बाइट नहीं।

एक मौजूदा FileInputStream से 20 वर्ण छोड़ करने के लिए:

BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream)); 
// read what you want here 
reader.skip(20); 
// read the rest of the file after skipping 
+0

Waooo, दिलचस्प –

+5

@QuanNguyen - एक अंगूठे नियम के रूप में, याद रखें कि * बाइट्स पर पाठ स्ट्रीम, पाठकों/लेखकों पात्रों पर काम करते हैं * – TheLostMind

+0

ध्यान रखें कि 'BufferedReader.skip()' भी आवश्यक रूप से वही नहीं कर सकता जो आप चाहते हैं आपके पास [बीएमपी] के बाहर वर्ण हैं (https://en.wikipedia.org/wiki/Plane_ (यूनिकोड) # बेसिक_Multilingual_Plane)। – Phylogenesis

2

एक काउंटर mantain।

लूप सभी वर्ण प्रत्येक पढ़ने के लिए काउंटर को बढ़ाते हैं। जब आप छोड़े जाने वाले पात्रों की शुरुआत के अनुरूप काउंटर सीमा तक पहुंच जाते हैं, तो उन पात्रों को छोड़ दें जिन्हें आपको छोड़ने की आवश्यकता है।

int counter = 0; 
while (counter < START_SKIP) { 
    int x = input.read(); 
    // Do something 
} 
input.skip(NUM_CHARS_TO_SKIP); 
... 
// Continue reading the remainings chars 

आवश्यक उपयोग एक BufferedReader प्रदर्शन में सुधार करने हैं के रूप में Tunaki कहा (या BufferedInputStream फ़ाइल आप पढ़ रहे हैं के प्रकार पर निर्भर, द्विआधारी या पाठ फ़ाइल है)।

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