2013-08-31 3 views
6

मैं एंड्रॉइड विकास के लिए नया हूं और कुछ फाइल आईओ करने की कोशिश कर रहा हूं। जब भी मैं कोड के इस खंड चलाएँ:एंड्रॉइड - त्रुटि खोलने वाली फ़ाइल ने अभी बनाया

File meta = new File(context.getAppContext().getFilesDir(),"meta"); 
meta.mkdirs(); 
File dir = new File(meta,"subdir"); 
File imageFile = new File(dir,"filename"); 
Log.d("test",imageFile.getAbsolutePath()); 
FileOutputStream outputStream = new FileOutputStream(imageFile); 

मैं इस त्रुटि मिलती है:

java.io.FileNotFoundException: /data/data/com.example.android.networkusage/files/meta/Greg and The Morning Buzz/artwork30.jpg: open failed: ENOENT (No such file or directory) 
    at libcore.io.IoBridge.open(IoBridge.java:406) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 
    at com.example.android.networkusage.Podcast.downloadArtworkFromUrl(Podcast.java:117) 
    at com.example.android.networkusage.Podcast.<init>(Podcast.java:93) 
    at com.example.android.networkusage.JSONParser.parse(JSONParser.java:113) 
    at com.example.android.networkusage.NetworkActivity.loadXmlFromNetwork(NetworkActivity.java:240) 
    at com.example.android.networkusage.NetworkActivity.access$100(NetworkActivity.java:65) 
    at com.example.android.networkusage.NetworkActivity$DownloadXmlTask.doInBackground(NetworkActivity.java:203) 
    at com.example.android.networkusage.NetworkActivity$DownloadXmlTask.doInBackground(NetworkActivity.java:198) 
    at android.os.AsyncTask$2.call(AsyncTask.java:264) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
    at java.lang.Thread.run(Thread.java:856) 
    Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory) 
    at libcore.io.Posix.open(Native Method) 
    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
    at libcore.io.IoBridge.open(IoBridge.java:390) 
    ... 16 more 

लॉग भी निर्देश दिया है, तो फ़ाइल मौजूद होना चाहिए के रूप में फ़ाइल के पथ बाहर प्रिंट! ये क्यों हो रहा है?

इसके अलावा, मेरे ऐप आंतरिक और बाह्य लिखने विशेषाधिकार है।

उत्तर

6

उप-निर्देशिका (subdir) और फ़ाइल मौजूद नहीं है में से एक। वास्तव में फ़ाइल बनाने के लिए कोड को createNewFile() पर कॉल करना चाहिए। subdir निर्देशिका को mkdirs() पर कॉल करके भी किया जाना चाहिए।

File meta = new File(context.getAppContext().getFilesDir(),"meta") 
meta.mkdirs(); 
File dir = new File(meta, "subdir"); 
dir.mkdirs(); //added 
File imageFile = new File(dir, "filename.txt"); 
imageFile.createNewFile(); //added 
FileOutputStream outputStream = new FileOutputStream(imageFile); 

मैं नहीं मानता File निर्माता वास्तव में फाइल सिस्टम पर फ़ाइल बनाता है। प्रलेखन राज्यों:

एक गतिविधि/संदर्भ अंदर से

:

File dir = getDir("Foler", 0);  // i think your problem is here 
File file = new File(dir,"File.bin"); 

एंड्रॉयड में निर्देशिका बनाने

Instances of this class may or may not denote an actual file-system object such as a file or a directory. If it does denote such an object then that object resides in a partition. A partition is an operating system-specific portion of storage for a file system. A single storage device (e.g. a physical disk-drive, flash memory, CD-ROM) may contain multiple partitions. The object, if any, will reside on the partition named by some ancestor of the absolute form of this pathname.

+0

किसी भी भाग्य @anonymouse तक कोशिश फ्लॉप? –

+0

हाय केविन, खेद है कि मुझे जवाब देने में बहुत लंबा लगा। आपका जवाब काम किया। धन्यवाद! – anonymouse

1

यह एक परियोजना से कोड का एक टुकड़ा मैं पर काम कर रहा हूँ अभी है सामान्य कंप्यूटर पर जावा से अलग है,) नई फ़ाइल (...) के बजाय getDir() का उपयोग कर अपने निर्देशिका बनाने का प्रयास करें। mkdirs (, और यह एक संदर्भ के अंदर से (के बाद गतिविधि बनाई गई है)

है सुनिश्चित करें 210

मुझे नहीं मानना ​​है कि मैं सबसे अच्छा एक इस सवाल का जवाब देने के बाद से मैं रूप में अच्छी तरह Android के लिए नया हूँ, लेकिन हो सकता है इस

तो अंतिम कोड हो सकता है में मदद करता है इस

File dir = getDir("subdir",0); 
File imageFile = new File(dir, "filename.txt"); 
imageFile.createNewFile(); 
FileOutputStream outputStream = new FileOutputStream(imageFile); 

मुझे नहीं के बारे में पता कर रहा हूँ की तरह नेस्ट निर्देशिका बनाने, मैं इसे अब

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