Android saving file to external storage

后端 未结 12 866
抹茶落季
抹茶落季 2020-11-22 03:12

I have a little issue with creating a directory and saving a file to it on my android application. I\'m using this piece of code to do this :

String filename         


        
12条回答
  •  北荒
    北荒 (楼主)
    2020-11-22 04:05

    Try This :

    1. Check External storage device
    2. Write File
    3. Read File
    public class WriteSDCard extends Activity {
    
        private static final String TAG = "MEDIA";
        private TextView tv;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            tv = (TextView) findViewById(R.id.TextView01);
            checkExternalMedia();
            writeToSDFile();
            readRaw();
        }
    
        /**
         * Method to check whether external media available and writable. This is
         * adapted from
         * http://developer.android.com/guide/topics/data/data-storage.html
         * #filesExternal
         */
        private void checkExternalMedia() {
            boolean mExternalStorageAvailable = false;
            boolean mExternalStorageWriteable = false;
            String state = Environment.getExternalStorageState();
            if (Environment.MEDIA_MOUNTED.equals(state)) {
                // Can read and write the media
                mExternalStorageAvailable = mExternalStorageWriteable = true;
            } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
                // Can only read the media
                mExternalStorageAvailable = true;
                mExternalStorageWriteable = false;
            } else {
                // Can't read or write
                mExternalStorageAvailable = mExternalStorageWriteable = false;
            }
            tv.append("\n\nExternal Media: readable=" + mExternalStorageAvailable
                + " writable=" + mExternalStorageWriteable);
        }
    
        /**
         * Method to write ascii text characters to file on SD card. Note that you
         * must add a WRITE_EXTERNAL_STORAGE permission to the manifest file or this
         * method will throw a FileNotFound Exception because you won't have write
         * permission.
         */
        private void writeToSDFile() {
            // Find the root of the external storage.
            // See http://developer.android.com/guide/topics/data/data-
            // storage.html#filesExternal
            File root = android.os.Environment.getExternalStorageDirectory();
            tv.append("\nExternal file system root: " + root);
            // See
            // http://stackoverflow.com/questions/3551821/android-write-to-sd-card-folder
            File dir = new File(root.getAbsolutePath() + "/download");
            dir.mkdirs();
            File file = new File(dir, "myData.txt");
            try {
                FileOutputStream f = new FileOutputStream(file);
                PrintWriter pw = new PrintWriter(f);
                pw.println("Hi , How are you");
                pw.println("Hello");
                pw.flush();
                pw.close();
                f.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                Log.i(TAG, "******* File not found. Did you"
                    + " add a WRITE_EXTERNAL_STORAGE permission to the   manifest?");
            } catch (IOException e) {
                e.printStackTrace();
            }
            tv.append("\n\nFile written to " + file);
        }
    
        /**
         * Method to read in a text file placed in the res/raw directory of the
         * application. The method reads in all lines of the file sequentially.
         */
        private void readRaw() {
            tv.append("\nData read from res/raw/textfile.txt:");
            InputStream is = this.getResources().openRawResource(R.raw.textfile);
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr, 8192); // 2nd arg is buffer
            // size
            // More efficient (less readable) implementation of above is the
            // composite expression
            /*
             * BufferedReader br = new BufferedReader(new InputStreamReader(
             * this.getResources().openRawResource(R.raw.textfile)), 8192);
             */
            try {
                String test;
                while (true) {
                    test = br.readLine();
                    // readLine() returns null if no more lines in the file
                    if (test == null) break;
                    tv.append("\n" + "    " + test);
                }
                isr.close();
                is.close();
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            tv.append("\n\nThat is all");
        }
    }
    

提交回复
热议问题