I can not get my application to write to the sdcard. I have tried several different ways and none of them are working. I have seen several posts here on SO that are having the same problem and the problem is not resolved. Can someone please take a look at my code and see what is wrong?
I have <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> in my manifest.
String inFileName = "/data/data/cpe495.smartapp/files/test.csv"; //TODO Use folder/filename
File inFile = new File(inFileName);
try{
FileInputStream fis = new FileInputStream(inFile);
String outFileName = Environment.getExternalStorageDirectory()+"/test.csv"; //TODO Use output filename
OutputStream output = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer))>0)
output.write(buffer, 0, length);
output.flush();
output.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
04-06 00:17:14.961: WARN/System.err(279): java.io.FileNotFoundException: /mnt/sdcard/test.csv (Permission denied)
04-06 00:17:15.000: WARN/System.err(279): at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
04-06 00:17:15.000: WARN/System.err(279): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
04-06 00:17:15.012: WARN/System.err(279): at java.io.FileOutputStream.<init>(FileOutputStream.java:97)
04-06 00:17:15.022: WARN/System.err(279): at java.io.FileOutputStream.<init>(FileOutputStream.java:168)
04-06 00:17:15.032: WARN/System.err(279): at java.io.FileOutputStream.<init>(FileOutputStream.java:147)
04-06 00:17:15.032: WARN/System.err(279): at cpe495.smartapp.SmartApp$8.onClick(SmartApp.java:165)
04-06 00:17:15.041: WARN/System.err(279): at android.view.View.performClick(View.java:2408)
04-06 00:17:15.051: WARN/System.err(279): at android.view.View$PerformClick.run(View.java:8816)
04-06 00:17:15.062: WARN/System.err(279): at android.os.Handler.handleCallback(Handler.java:587)
04-06 00:17:15.062: WARN/System.err(279): at android.os.Handler.dispatchMessage(Handler.java:92)
04-06 00:17:15.072: WARN/System.err(279): at android.os.Looper.loop(Looper.java:123)
04-06 00:17:15.072: WARN/System.err(279): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-06 00:17:15.081: WARN/System.err(279): at java.lang.reflect.Method.invokeNative(Native Method)
04-06 00:17:15.091: WARN/System.err(279): at java.lang.reflect.Method.invoke(Method.java:521)
04-06 00:17:15.091: WARN/System.err(279): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-06 00:17:15.101: WARN/System.err(279): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-06 00:17:15.101: WARN/System.err(279): at dalvik.system.NativeStart.main(Native Method)
The solution to this problem was to add an sdcard to the emulator. After adding the sd card to the emulator everything worked fine.
Here is one way to do this.
The other way, is to pull up your list of devices in eclipse, then create a new virtual device. During the setup for the virtual device a window with options should come up that asks if you want an sdcard and what size you want it. This is how i did it, and i was unable to find a tutorial for it online. I stumbled on this on accident when looking around for options.
Thanks in advance!