在android上移动文件

时间:2012-02-03 00:01:15

标签: android

我需要将文件从用户SD卡上的一个位置移动到SD卡上的另一个位置

目前我正在使用File.renameTo

这样做

e.g。从sdcard / test / one.txt到sdcard / test2 / two.txt

有些用户报告文件移动功能无效。

我看到了以下链接:

How to copy files from 'assets' folder to sdcard?

那么在SD卡上将文件从一个目录移动到另一个目录的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

尝试使用这些代码进行复制并检查文件并删除原始文件。

private void backup(File sourceFile)
{
    FileInputStream fis = null;
    FileOutputStream fos = null;
    FileChannel in = null;
    FileChannel out = null;

    try
    {
        File backupFile = new File(backupDirectory.getAbsolutePath() + seprator + sourceFile.getName());
        backupFile.createNewFile();

        fis = new FileInputStream(sourceFile);
        fos = new FileOutputStream(backupFile);
        in = fis.getChannel();
        out = fos.getChannel();

        long size = in.size();
        in.transferTo(0, size, out);
    }
    catch (Throwable e)
    {
        e.printStackTrace();
    }
    finally
    {
        try
        {
            if (fis != null)
                fis.close();
        }
        catch (Throwable ignore)
        {}

        try
        {
            if (fos != null)
                fos.close();
        }
        catch (Throwable ignore)
        {}

        try
        {
            if (in != null && in.isOpen())
                in.close();
        }
        catch (Throwable ignore)
        {}

        try
        {
            if (out != null && out.isOpen())
                out.close();
        }
        catch (Throwable ignore)
        {}
    }
}

答案 1 :(得分:1)

为什么你不能使用rename

File sd=Environment.getExternalStorageDirectory();
// File (or directory) to be moved
String sourcePath="/.Images/"+imageTitle;
File file = new File(sd,sourcePath);
// Destination directory
boolean success = file.renameTo(new File(sd, imageTitle));

答案 2 :(得分:1)

我知道很久以前这个问题已得到解答,但我发现复制整个文件是一种苛刻的方法...... 如果有人需要,我会这样做:

static public boolean moveFile(String oldfilename, String newFolderPath, String newFilename) {
    File folder = new File(newFolderPath);
    if (!folder.exists())
        folder.mkdirs();

    File oldfile = new File(oldfilename);
    File newFile = new File(newFolderPath, newFilename);

    if (!newFile.exists())
        try {
            newFile.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    return oldfile.renameTo(newFile);
}