Android:将文件从一个目录复制到另一个目录
Posted
技术标签:
【中文标题】Android:将文件从一个目录复制到另一个目录【英文标题】:Android: copying files from one directory to another 【发布时间】:2013-10-24 21:43:27 【问题描述】:我正在使用以下代码和 apache commons library 将一个文件(临时音频文件)从源文件夹复制到目标文件夹作为 TT_1A。
代码:
button1_save.setOnClickListener(new OnClickListener()
public void onClick(View v)
String sourcePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/TT/tt_temp.3gp";
File source = new File(sourcePath);
String descPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/TT/tt_1A.3gp";
File desc = new File(descPath);
try
FileUtils.copyDirectory(source, desc);
catch (IOException e)
e.printStackTrace();
);
Apache Commons:
http://commons.apache.org/proper/commons-io/download_io.cgi
问题:
我使用了FileUtils
函数来复制临时文件并作为TT_1A 粘贴到desc 文件夹。然而 logcat 报告错误并包含以下详细信息:
10-17 00:41:04.260: E/androidRuntime(27450): FATAL EXCEPTION: main
10-17 00:41:04.260: E/AndroidRuntime(27450): java.lang.NoClassDefFoundError: org.apache.commons.io.FileUtils
10-17 00:41:04.260: E/AndroidRuntime(27450): at com.abc.abc.TT_details_canton$14.onClick(TT_details_canton.java:575)
10-17 00:41:04.260: E/AndroidRuntime(27450): at android.view.View.performClick(View.java:4223)
10-17 00:41:04.260: E/AndroidRuntime(27450): at android.view.View$PerformClick.run(View.java:17275)
10-17 00:41:04.260: E/AndroidRuntime(27450): at android.os.Handler.handleCallback(Handler.java:615)
10-17 00:41:04.260: E/AndroidRuntime(27450): at android.os.Handler.dispatchMessage(Handler.java:92)
10-17 00:41:04.260: E/AndroidRuntime(27450): at android.os.Looper.loop(Looper.java:137)
10-17 00:41:04.260: E/AndroidRuntime(27450): at android.app.ActivityThread.main(ActivityThread.java:4898)
10-17 00:41:04.260: E/AndroidRuntime(27450): at java.lang.reflect.Method.invokeNative(Native Method)
10-17 00:41:04.260: E/AndroidRuntime(27450): at java.lang.reflect.Method.invoke(Method.java:511)
10-17 00:41:04.260: E/AndroidRuntime(27450): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
10-17 00:41:04.260: E/AndroidRuntime(27450): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
10-17 00:41:04.260: E/AndroidRuntime(27450): at dalvik.system.NativeStart.main(Native Method)
我整晚都坚持这个。有没有办法复制文件??
【问题讨论】:
您是否在类路径中将公共 jar 标记为“导出”?似乎它没有被排除在 apk 中。 对不起,我发现一个可怕的错误,将代码修改为 FileUtils.copyFile(source, desc);它现在按预期执行。仍然非常感谢您的帮助! To move a file, this might help: 【参考方案1】:经过如下修改后运行良好:
button1_save.setOnClickListener(new OnClickListener()
public void onClick(View v)
String sourcePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/TongueTwister/tt_temp.3gp";
File source = new File(sourcePath);
String destinationPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/TongueTwister/tt_1A.3gp";
File destination = new File(destinationPath);
try
FileUtils.copyFile(source, destination);
catch (IOException e)
e.printStackTrace();
);
【讨论】:
FileUtils 在哪里? @皮尔马克 @APOORVADOSHI FileUtils 是 Apache commons io 包。要使用它,您必须将 commons-io.jar 添加到您的项目中。 FileUtils 解决了这个问题,而且它复制整个目录只是传递目标目录和源目录,它会将整个目录复制到新目录中 commons-io android gradle 依赖编译'commons-io:commons-io:2.4' FileUtils.copyFile() 函数在 DCIM 文件夹中生成一个额外的文件副本!【参考方案2】:在 API 级别 29 中,android 增加了 FileUtils 类,该类具有复制功能。
使用此代码复制您的文件:-
public void copyFile(File source, File destination) throws IOException
FileUtils.copy(new FileInputStream(source), new FileOutputStream(destination));
如果 Android Studio 没有找到 FileUtils 类,说明你的 compileSdkVersion 低于 29,此时你必须升级你的 compileSdkVersion。
要升级,请转到您的应用级 build.gradle 文件并将旧的 compileSdkVersion 替换为 29
这样
compileSdkVersion 29
有关 FileUtils 类的更多信息,请访问 Android 开发者网站 https://developer.android.com/reference/android/os/FileUtils
【讨论】:
你必须将 minSdkVersion 增加到 29,而不是 compileSdkVersion。 java.io.FileNotFoundException:/storage/emulated/0/DCIM/Camera/IMG_20210629_175744.jpg:打开失败:EACCES(权限被拒绝) 确保在此调用之前已授予读写权限以上是关于Android:将文件从一个目录复制到另一个目录的主要内容,如果未能解决你的问题,请参考以下文章
代码不起作用:使用 vba 将文件从一个目录复制到另一个目录