2009-06-23 17 views
5

मैं एक कारगर तरीका एक फ़ाइल जिसका आकार बनाने के लिए देख रहा हूँ के लिए उपयोग अज्ञात है लेकिन एमबी से जीबी की सीमा और बेतरतीब ढंग से अपनी सामग्री भर सकते हैं। मैं अंत तक कूदने से पहले 200 बाइट लिख सकता हूं और पिछले 200 बाइट लिख सकता हूं और बीच में जा सकता हूं और वहां लिख सकता हूं। RandomAccessFile ऐसा करने के लिए कुशल है या इस तरह के नौकरी के लिए बेहतर विकल्प हैं?जावा बड़ी फ़ाइल

उत्तर

10

हाँ, RandomAccessFile का उपयोग करें - कि क्या इसके लिए वहाँ है। आप संभवतः एक FileChannel इस्तेमाल कर सकते हैं, लेकिन मैं RandomAccessFile पहले के लिए जाना चाहते हैं - यह सरल होने की संभावना है।

ध्यान दें कि आप अंत हिस्सा लेखन के बाद फ़ाइल की "बीच में सम्मिलित करने के लिए" में सक्षम नहीं होगा: मैं किसी भी फाइल सिस्टम जो कि समर्थन करता है, पता नहीं है। मूल रूप से अंतिम अनुभाग लिखने से पहले आपको पूर्ण आकार की आवश्यकता होगी। एक विकल्प अनुक्रमिक रूप से लिखना होगा, अंत तक अंतिम बिट को याद रखना।

आप हमें आप क्या करने की जरूरत है (और आप आकार के बारे में जानकारी होने पर) हम आपको अधिक मदद करने में सक्षम हो सकता है के बारे में अधिक जानकारी देने के कर सकते हैं।

संपादित करें:

import java.io.*; 

public class Test 
{ 
    // Just for the sake of a simple test program! 
    public static void main(String[] args) throws Exception 
    { 
     RandomAccessFile file = new RandomAccessFile("file.dat", "rw"); 

     file.seek(100); 
     file.write(0); 
     file.close(); 
    } 
} 

इस के बाद बाहर निकल गया है, file.dat 101 बाइट्स लंबे हो जाएगा: एक विशिष्ट आकार के साथ फ़ाइल बनाने के लिए, आप seek() अंत अतीत और फिर डेटा लिख ​​सकते हैं। (कि नोट सामान्य रूप से आप की कोशिश अंततः आदि का उपयोग करें /)

संपादित करें: के रूप में टिप्पणी में उल्लेख किया coobird, setLength() भी फ़ाइल का विस्तार होगा - लेकिन यह भी फ़ाइल छोटा कर देते हैं आप लंबाई वर्तमान की तुलना में कम दे देंगे आकार। मूल रूप से धार डेटा लिखने के बारे में आपकी टिप्पणी को देखते हुए, मुझे संदेह है कि खोजना और फिर लिखना बिल्कुल वही व्यवहार है जो आप चाहते हैं। जब आप एक हिस्सा प्राप्त करते हैं, तो बस सही स्थान की तलाश करें, इसे लिखें, और जब फ़ाइल की आवश्यकता हो तो फाइल स्वयं ही विस्तारित होगी।

+0

वहाँ पुनरावृत्ति और लेखन के अलावा अन्य एक उपसर्ग आकार के साथ फ़ाइल बनाने के लिए एक रास्ता है क्या करना चाहिए सब शून्य के या किसी के भरने के लिए? –

+0

इसे प्रतिबिंबित करने के लिए संपादन। –

+0

धन्यवाद, कारण मुझे फ़ाइल में यादृच्छिक भागों को लिखना है, क्या मैं एक धारक ग्राहक को कार्यान्वित कर रहा हूं और टुकड़े फ़ाइल में यादृच्छिक स्थानों के लिए आ जाएंगे, लेकिन मुझे पहले से पता है कि पूरी फाइल का आकार क्या होगा। –

1

मैं RandomAccessFile लगता है इस समस्या के लिए ठीक है

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