java - 将文件从文件阵列复制到目录

标签 java android

我正在尝试复制文件列表中的文件。当用户长按列表中的项目时,我想复制选定的文件。

    public class MainActivity extends ListActivity {

private File file;
private List<String> myList;

String rootsd = Environment.getExternalStorageDirectory().toString();
String old = "/Android/data/co.vine.android/cache/videos";
String dirNameSlash = "/videos/";
String path = Environment.getExternalStorageDirectory() + dirNameSlash;
String newDir = "/Saved";
String olddir2 = new String( rootsd + old );
String newdir2 = new String( rootsd + newDir);
File temp_dir = new File(newDir);


public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    ListView lv = getListView();
    lv.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int row, long arg3) {

            String item = (String) getListAdapter().getItem(row);
           // CopyFile
            Toast.makeText(getApplicationContext(), "File has been copied", Toast.LENGTH_LONG).show();

            return true;
        }
    });

    if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        Log.d("MyApp", "No SDCARD");
} else {
    File directory = new File(Environment.getExternalStorageDirectory()+File.separator+"Saved");
    directory.mkdirs();

}

    myList = new ArrayList<String>();   

    String root_sd = Environment.getExternalStorageDirectory().toString();
    file = new File( root_sd + "/videos" ) ;       
    File list[] = file.listFiles();

    for( int i=0; i< list.length; i++)
    {
            myList.add( list[i].getName() );
    }

    setListAdapter(new ArrayAdapter<String>(this,
            R.layout.row, myList )); 
}

protected void onListItemClick(ListView l, View v, int position, long id) 
{
    super.onListItemClick(l, v, position, id);
    String item = (String) getListAdapter().getItem(position);
    Intent intentToPlayVideo = new Intent(Intent.ACTION_VIEW);
    intentToPlayVideo.setDataAndType(Uri.parse(path + item), "video/*");
    startActivity(intentToPlayVideo);
}

@Override
public void onBackPressed() {
            MainActivity.this.finish();
    }

任何帮助都会很棒。用户选择的所有文件都将保存到同一目录中。我需要帮助确定用户选择的文件,然后复制它。谢谢!

最佳答案

我推荐你使用FileChanel,效率更高,速度更快。示例:

 try {
            String root_sd = Environment.getExternalStorageDirectory().toString();
            String theFile = root_sd + "/" + (String) getListAdapter().getItem(row);
            File file = new File(theFile);
            FileInputStream source= new FileInputStream(file);
            String targetDirectory = Environment.getExternalStorageDirectory().toString();
            FileOutputStream destination = new FileOutputStream(targetDirectory + "/videos/" + file.getName);
            FileChannel sourceFileChannel = source.getChannel();
            FileChannel destinationFileChannel = destination.getChannel();
            long size = sourceFileChannel.size();

            sourceFileChannel.transferTo(0, size, destinationFileChannel);


        } catch (Exception ex) {
            Logger.getLogger(Borrar.class.getName()).log(Level.SEVERE, null, ex);
        }

关于java - 将文件从文件阵列复制到目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18816409/

相关文章:

java - 从数组中的特定字段填充

android - 在更新我的新版 apk 时出现解析包错误

java - 在java中使用通用数学库

java - 何时和何时不使用 IOC/依赖注入(inject)?

android - 如何在多个 Activity 中使用服务?

android - 使用 webview 打开新的 android Activity 会显示空白(白色)屏幕而不是 html 内容

android - 我想使用 Google Java Api Client 在 netbeans 上设置 android 项目?

java - 计算当前连胜 - sqlite

java - 雅虎财经历史 API csv 似乎无法 openstream? java

java - 通过 servlet/jsp 从 mysql 数据库中删除数据