2013-08-31 16 views
6

Ben android geliştirme ve bazı dosya IO yapmaya çalışıyorum. Ben bu kod bloğunu çalıştırmak zaman:Android - dosya açıldı hata oluşturuldu

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); 

bu hatayı alıyorum:

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 

günlük bile yönlendirilmiş, bu nedenle dosya bulunması gerekir olarak dosyanın yolunu yazdırır! Bu neden oluyor?

Ayrıca, uygulamanızın dahili ve harici yazma ayrıcalıkları var.

cevap

6

Alt dizinlerden biri (subdir) ve dosya mevcut değil. Dosyayı gerçekten oluşturmak için kod createNewFile()'u çağırmalıdır. Ayrıca subdir dizininin mkdirs() numaralı telefonu arayarak yapılması gerekir.

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); 

Ben File yapıcı aslında dosya sisteminde dosya oluşturur inanmıyorum. dokümantasyon devletler: android içinde dizin oluşturma

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

: bir faaliyet/bağlam içinden

:

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 Herhangi bir şans? –

+0

Merhaba Kevin, üzgünüm cevap vermem çok uzun sürdü. Cevabın işe yaradı. Teşekkürler! – anonymouse

1

bu ı şu anda üzerinde çalıştığım bir projeden kod snippet'idir normal bilgisayardaki java'dan farklıdır, yeni Dosya (...) yerine getDir() kullanarak dizininizi oluşturmaya çalışın. mkdirs() ve içeriğin içinden (etkinlik oluşturulduktan sonra) olduğundan emin olun

i do not 210

i yeniyim de android, ama belki bu ı bilmediğin bu

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

gibi

böylece nihai kod belki yardımcı beri bu soruyu cevaplamak için en iyisiyim inanıyoruz iç içe dizinler yapma, ben şimdiye kadar denemedim