在Android中构建新目录和推送文件

在Android中构建新目录和推送文件,android,Android,我知道我在我的另一个项目中使用了一些代码,用于创建一个新文件夹(如果它不存在),并将项目中的文件放入其中。但在我的新项目中,代码什么都不做。我做错了什么 File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "testing"); directory.mkdirs(); File directory2 =

我知道我在我的另一个项目中使用了一些代码,用于创建一个新文件夹(如果它不存在),并将项目中的文件放入其中。但在我的新项目中,代码什么都不做。我做错了什么

File directory = new File(Environment.getExternalStorageDirectory()
                + File.separator + "testing");
            directory.mkdirs();

        File directory2 = new File(Environment.getExternalStorageDirectory()
                + File.separator + "CandooData" + File.separator + "Meds");
        if (!(directory2.isDirectory())) {
            directory2.mkdirs();
        }
        File directory3 = new File(Environment.getExternalStorageDirectory()
                + File.separator + "CandooData" + File.separator + "Meds");
        String[] files;
        if (directory3.isDirectory()) {
            files = directory3.list();
            if (files.length == 0) {
                // directory is empty
                CopyAssets("medsxml", "/Meds");
            }
        }

使用这个目录.mkdir()而不是此目录.mkdirs()

使用这个目录.mkdir()而不是此目录.mkdirs()

  • 通过logcat查看日志

  • 您可能错过了写入外部存储权限

  • mkdirs()可以正常工作,不比mkdir()差

  • 通过logcat查看日志

  • 您可能错过了写入外部存储权限

  • mkdirs()可以正常工作,不比mkdir()差


  • 我使用下面的方法创建目录并将文件保存到其中

    private static File APP_FILE_PATH = new File("/sdcard/SpeechTutor");
    
     p_file_Side_Slow = new File("/sdcard/SpeechTutor/P_SideMovieSlow.mp4");
            p_file_Side_Medium = new File("/sdcard/SpeechTutor/P_SideMovieMedium.mp4");
            p_file_Side_Fast = new File("/sdcard/SpeechTutor/P_SideMovieFast.mp4");
    
            p_file_Front_Slow = new File("/sdcard/SpeechTutor/P_FrontMovieSlow.mp4");
            p_file_Front_Medium = new File("/sdcard/SpeechTutor/P_FrontMovieMedium.mp4");
            p_file_Front_Fast = new File("/sdcard/SpeechTutor/P_FrontMovieFast.mp4");
    
     if((!(p_file_Side_Slow.exists())) || (!(p_file_Side_Medium.exists())) || (!(p_file_Side_Fast.exists())) 
                    || (!(p_file_Front_Slow.exists()))|| (!(p_file_Front_Medium.exists()))||(!(p_file_Front_Fast.exists()))){
                ArrayList<String> files = new ArrayList<String>();
                files.add("P_SideMovieSlow.mp4");
                files.add("P_SideMovieMedium.mp4");
                files.add("P_SideMovieFast.mp4");
    
                files.add("P_FrontMovieSlow.mp4");
                files.add("P_FrontMovieMedium.mp4");
                files.add("P_FrontMovieFast.mp4");
                new myAsyncTask().execute(files);
             }
    
    
    
    // AsyncTass for the Progress Dialog and to do Background Process
        private class myAsyncTask extends AsyncTask<ArrayList<String>, Void, Void> {         
            ArrayList<String> files;         
            ProgressDialog dialog;         
            @Override         
            protected void onPreExecute() {             
                dialog = ProgressDialog.show(MainScreenActivity.this, "Speech Tutor", "Loading...");         
            }         
            @Override         
            protected Void doInBackground(ArrayList<String>... params) {              
                files = params[0];             
                for (int i = 0; i < files.size(); i++) {                 
                    copyFileFromAssetsToSDCard(files.get(i));                
                }             return null;         
            }         
            @Override         
            protected void onPostExecute(Void result) {             
                dialog.dismiss();   
    //          myVideoThumbnail.setImageBitmap((Bitmap)ThumbnailUtils.createVideoThumbnail(p_file_Side_Slow.getAbsolutePath(),MediaStore.Video.Thumbnails.MINI_KIND));
    //          myVideoView.setVideoURI(p_uri_Side_Medium);
                setVideoURI(sideShow, frontshow, slowShow, mediumShow, fastShow);
            }      
        } 
    
    
    // Function to copy file from Assets to the SDCard
        public void copyFileFromAssetsToSDCard(String fileFromAssets){
            AssetManager is = this.getAssets();
            InputStream fis;
            try {
                fis = is.open(fileFromAssets);
                FileOutputStream fos;
                if (!APP_FILE_PATH.exists()) {
                    APP_FILE_PATH.mkdirs();
                }
                fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory()+"/SpeechTutor",fileFromAssets));
                byte[] b = new byte[8];
                int i;
                while ((i = fis.read(b)) != -1) {
                    fos.write(b, 0, i);
                }
                fos.flush();
                fos.close();
                fis.close();
            } 
            catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    
    私有静态文件APP\u File\u PATH=新文件(“/sdcard/SpeechTutor”);
    p_file_Side_Slow=新文件(“/sdcard/SpeechTutor/p_SideMovieSlow.mp4”);
    p_file_Side_Medium=新文件(“/sdcard/SpeechTutor/p_sidemoviemedia.mp4”);
    p_file_Side_Fast=新文件(“/sdcard/SpeechTutor/p_SideMovieFast.mp4”);
    p_file_Front_Slow=新文件(“/sdcard/SpeechTutor/p_FrontMovieSlow.mp4”);
    p_file_Front_Medium=新文件(“/sdcard/SpeechTutor/p_frontmoviemedia.mp4”);
    p_file_Front_Fast=新文件(“/sdcard/SpeechTutor/p_FrontMovieFast.mp4”);
    如果(!(p_文件_端_慢.存在())| |(!(p_文件_端_中.存在())|(!(p_文件_端_快.存在()))
    ||(!(p_file_Front_Slow.exists())| |(!(p_file_Front_Medium.exists())|(!(p_file_Front_Fast.exists())){
    ArrayList files=新的ArrayList();
    添加(“P_SideMovieSlow.mp4”);
    添加(“P_sidemoviemedia.mp4”);
    添加(“P_SideMovieFast.mp4”);
    添加(“P_FrontMovieSlow.mp4”);
    添加(“P_frontmoviemedia.mp4”);
    添加(“P_FrontMovieFast.mp4”);
    新建myAsyncTask().execute(文件);
    }
    //用于进度对话框和待办事项后台进程的异步
    私有类myAsyncTask扩展了AsyncTask{
    ArrayList文件;
    进程对话;
    @凌驾
    受保护的void onPreExecute(){
    dialog=ProgressDialog.show(MainScreenActivity.this,“语音导师”,“加载…”);
    }         
    @凌驾
    受保护的Void doInBackground(ArrayList…params){
    files=params[0];
    对于(inti=0;i

    以上所有代码都将文件保存为后台进程。

    我使用下面的方法创建目录并将文件保存到其中

    private static File APP_FILE_PATH = new File("/sdcard/SpeechTutor");
    
     p_file_Side_Slow = new File("/sdcard/SpeechTutor/P_SideMovieSlow.mp4");
            p_file_Side_Medium = new File("/sdcard/SpeechTutor/P_SideMovieMedium.mp4");
            p_file_Side_Fast = new File("/sdcard/SpeechTutor/P_SideMovieFast.mp4");
    
            p_file_Front_Slow = new File("/sdcard/SpeechTutor/P_FrontMovieSlow.mp4");
            p_file_Front_Medium = new File("/sdcard/SpeechTutor/P_FrontMovieMedium.mp4");
            p_file_Front_Fast = new File("/sdcard/SpeechTutor/P_FrontMovieFast.mp4");
    
     if((!(p_file_Side_Slow.exists())) || (!(p_file_Side_Medium.exists())) || (!(p_file_Side_Fast.exists())) 
                    || (!(p_file_Front_Slow.exists()))|| (!(p_file_Front_Medium.exists()))||(!(p_file_Front_Fast.exists()))){
                ArrayList<String> files = new ArrayList<String>();
                files.add("P_SideMovieSlow.mp4");
                files.add("P_SideMovieMedium.mp4");
                files.add("P_SideMovieFast.mp4");
    
                files.add("P_FrontMovieSlow.mp4");
                files.add("P_FrontMovieMedium.mp4");
                files.add("P_FrontMovieFast.mp4");
                new myAsyncTask().execute(files);
             }
    
    
    
    // AsyncTass for the Progress Dialog and to do Background Process
        private class myAsyncTask extends AsyncTask<ArrayList<String>, Void, Void> {         
            ArrayList<String> files;         
            ProgressDialog dialog;         
            @Override         
            protected void onPreExecute() {             
                dialog = ProgressDialog.show(MainScreenActivity.this, "Speech Tutor", "Loading...");         
            }         
            @Override         
            protected Void doInBackground(ArrayList<String>... params) {              
                files = params[0];             
                for (int i = 0; i < files.size(); i++) {                 
                    copyFileFromAssetsToSDCard(files.get(i));                
                }             return null;         
            }         
            @Override         
            protected void onPostExecute(Void result) {             
                dialog.dismiss();   
    //          myVideoThumbnail.setImageBitmap((Bitmap)ThumbnailUtils.createVideoThumbnail(p_file_Side_Slow.getAbsolutePath(),MediaStore.Video.Thumbnails.MINI_KIND));
    //          myVideoView.setVideoURI(p_uri_Side_Medium);
                setVideoURI(sideShow, frontshow, slowShow, mediumShow, fastShow);
            }      
        } 
    
    
    // Function to copy file from Assets to the SDCard
        public void copyFileFromAssetsToSDCard(String fileFromAssets){
            AssetManager is = this.getAssets();
            InputStream fis;
            try {
                fis = is.open(fileFromAssets);
                FileOutputStream fos;
                if (!APP_FILE_PATH.exists()) {
                    APP_FILE_PATH.mkdirs();
                }
                fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory()+"/SpeechTutor",fileFromAssets));
                byte[] b = new byte[8];
                int i;
                while ((i = fis.read(b)) != -1) {
                    fos.write(b, 0, i);
                }
                fos.flush();
                fos.close();
                fis.close();
            } 
            catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    
    私有静态文件APP\u File\u PATH=新文件(“/sdcard/SpeechTutor”);
    p_file_Side_Slow=新文件(“/sdcard/SpeechTutor/p_SideMovieSlow.mp4”);
    p_file_Side_Medium=新文件(“/sdcard/SpeechTutor/p_sidemoviemedia.mp4”);
    p_file_Side_Fast=新文件(“/sdcard/SpeechTutor/p_SideMovieFast.mp4”);
    p_file_Front_Slow=新文件(“/sdcard/SpeechTutor/p_FrontMovieSlow.mp4”);
    p_file_Front_Medium=新文件(“/sdcard/SpeechTutor/p_frontmoviemedia.mp4”);
    p_file_Front_Fast=新文件(“/sdcard/SpeechTutor/p_FrontMovieFast.mp4”);
    如果(!(p_文件_端_慢.存在())| |(!(p_文件_端_中.存在())|(!(p_文件_端_快.存在()))
    ||(!(p_file_Front_Slow.exists())| |(!(p_file_Front_Medium.exists())|(!(p_file_Front_Fast.exists())){
    ArrayList files=新的ArrayList();
    添加(“P_SideMovieSlow.mp4”);
    添加(“P_sidemoviemedia.mp4”);
    添加(“P_SideMovieFast.mp4”);
    添加(“P_FrontMovieSlow.mp4”);
    添加(“P_frontmoviemedia.mp4”);
    添加(“P_FrontMovieFast.mp4”);
    新建myAsyncTask().execute(文件);
    }
    //用于进度对话框和待办事项后台进程的异步
    私有类myAsyncTask扩展了AsyncTask{
    ArrayList文件;
    进程对话;
    @凌驾
    受保护的void onPreExecute(){
    dialog=ProgressDialog.show(MainScreenActivity.this,“语音导师”,“加载…”);
    }         
    @凌驾
    受保护的Void doInBackground(ArrayList…params){