当前位置: 首页 > 知识库问答 >
问题:

将文件从内部存储复制到外部存储

夹谷成仁
2023-03-14

我试图使用Adobe reader读取从服务器下载的pdf文件,但问题是当我将其存储在内部存储时,其他应用程序无法读取该文件。现在我想知道如何将此文件复制到外部存储(/sdcard/)中,以便pdf查看器可以查看。

由于安全原因,我将文件存储在内部存储,然后删除外部存储的文件。

我的问题是如何复制保存在内部存储中的文件,而不使用raw或将其放入InputStream中的资产。

    InputStream myInput = getResources().openRawResource(R.raw.p13);

        FileOutputStream fos = openFileOutput("sample", Context.MODE_PRIVATE);

        // transfer bytes from the input file to the output file
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0)
        {
            fos.write(buffer, 0, length);
        }
        // Close the streams
        fos.flush();
        fos.close();
        myInput.close();

共有1个答案

丁经国
2023-03-14

您在哪个路径存储pdf文件?

请参阅下面的一个从android资产获取文件并将其复制到特定的sdcard位置。

我将首先检查的pdf文件是否已经可用的愿望路径或不。

 File file1 = new File("/sdcard/SampleProjectApp/WindsorONE_Mobile_Molding.pdf");
    File file2 = new File("/sdcard/SampleProjectApp/WindsorONE_Mobile_PK.pdf");
    File file3 = new File("/sdcard/SampleProjectApp/Alone.mp4");

    if(!((file1.exists())) || !((file2.exists())) || !((file3.exists()))) {
        ArrayList<String> files = new ArrayList<String>();
        files.add("WindsorONE_Mobile_Molding.pdf");         
        files.add("WindsorONE_Mobile_PK.pdf"); 
        files.add("Alone.mp4");
        new myAsyncTask().execute(files);
    }

现在,如果文件不在该位置,那么它将执行myAsyncTask将文件从资产复制到SDCard。

 // 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(ListSample.this, "W1 SALES (beta)", "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();         
    }      
} 



 // 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()+"/SampleProjectApp", 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();
    }
}

已更新

就您而言:

替换SampleProjectApp/WindsorOne_Mobile_Modeld.pdf

Android/data/com.project.projectname/cache/your_pdf_file.pdf

希望有意义。

更新2

下面的代码是将文件从一个路径复制到另一个路径。您只需传递文件存在的路径和必须复制的路径。

代码:

public static boolean copyFile(String from, String to) {
try {
    int bytesum = 0;
    int byteread = 0;
    File oldfile = new File(from);
    if (oldfile.exists()) {
        InputStream inStream = new FileInputStream(from);
        FileOutputStream fs = new FileOutputStream(to);
        byte[] buffer = new byte[1444];
        while ((byteread = inStream.read(buffer)) != -1) {
            bytesum += byteread;
            fs.write(buffer, 0, byteread);
        }
        inStream.close();
        fs.close();
    }
    return true;
} catch (Exception e) {
    return false;
}

}

 类似资料:
  • 问题内容: 我的应用程序( Android API 15 )制作图片并将其存储在内部存储器的文件夹中。现在,我想将此文件复制到外部存储中的另一个文件夹,例如。我尝试了以下方法: 方法1: 方法2: 方法3: 这些方法都不能解决我的任务。在检查了许多相关主题之后,我发现的唯一建议是验证 在和它确实存在。 该 方法#1 完成执行,但没有文件夹和文件被复制。 在 方法#2 ,应用程序失败,异常的,但对象

  • 这些方法都不能解决我的任务。中检查了一些相关主题,我发现的唯一建议是验证 在中,并且它仍然存在。 方法#1完成执行,但没有复制文件夹和文件。 因为这是我迈向Android的第一步,我觉得我错过了一些小东西。请告诉我,如何在Android中将文件从一个文件夹复制到另一个文件夹,包括文件从内部内存移动到外部内存。

  • 问题内容: 如何复制到外部存储保持,以便以后可以共享首选项。 试图读取并另存为一个文件,创建了类型,但我需要一个。想过遍历应用程序的内部存储和复制文件,然后将其放入外部存储,但这可能太复杂了。 真的很想知道是否存在一种简单而明智的方式来传递`sharedpreferences。 问题答案: 使用此代码, 并取回它, 注意 使用此代码只能处理字符串类型首选项,

  • 在我的应用程序中,有一个由sqlite创建的数据库。我想将数据库复制到下载文件夹。我使用的是不同的方式,但并没有在真实的设备上工作(它说拒绝访问目录),可能是它想要根手机。请帮助,我想提供一个访问权限,以便用户可以从下载文件夹获取数据库。 请注意,我使用的是最新版本的android studio。 在下面给定的DatabaseHelper类中。在exportDB()方法中,我要实现这一点。

  • 为了清理一些磁盘空间,我将我的mp3收藏从内部存储移到外部存储。我的设备是根的,当时我是。 文件可以看到(和播放)从文件管理器,但我的音乐播放器没有看到他们。 看起来有趣的是移动后的文件权限。这是一个文件仍然在内部存储,但没有移动。 下面是几个被移到外部存储的文件: 将它们移动到外部存储似乎更改了权限。不幸的是,不会影响实际的文件权限: 我尝试将文件移回内部存储以更改那里的权限。直到我将文件移回外

  • 问题内容: 美好的一天! 我刚刚开始为Android开发。在我的应用中,我需要将资产文件夹中的项目复制到内部存储中。 我在SO上进行了大量搜索,包括将其复制到外部存储的内容。 这就是我要实现的目标:内部存储中已经存在一个目录,即X> Y> Z。我需要将一个文件复制到Y,将另一个复制到Z。 任何人都可以通过代码片段帮助我吗?我真的不知道该如何继续。 对不起,我的英语不好。 非常感谢。 问题答案: 用