android下根據路徑不同拷貝檔案至指定路徑

dainalyxiexie發表於2014-02-27

包含content或者file的檔案路徑,eg:content://media/external/audio/media/43870 或者 file://media/external/audio/media/43870,轉換為實際路徑,可以使用

public String getRealPath(Uri fileUrl) {
	String fileName = null;
	if (fileUrl != null) {
		if (fileUrl.getScheme().toString().compareTo("content") == 0) // content://開頭的uri
		{
			Cursor cursor = this.getContentResolver().query(fileUrl, null,
					null, null, null);
			if (cursor != null && cursor.moveToFirst()) {
				int column_index = cursor
						.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
				fileName = cursor.getString(column_index); // 取出檔案路徑
//					if (!fileName.startsWith("/mnt")) {// 檢查是否有"/mnt"字首
//						fileName = "/mnt" + fileName;
//					}
				cursor.close();
			}
		} else if (fileUrl.getScheme().compareTo("file") == 0) { // file:///開頭的uri
			fileName = fileUrl.toString();
			fileName = fileUrl.toString().replace("file://", "");// 替換file://
//				if (!fileName.startsWith("/mnt")) {// 加上"/mnt"頭
//					fileName += "/mnt";
//				}
		}
	}
	return fileName;
}

註釋的部分為增加/mnt,需要此字首可以增加。

 

根據uri拷貝檔案至指定路徑下,eg:eg:content://media/external/audio/media/43870,可以用如下方法:

public void copyFile(String audioDst, Uri uri) {
	try {
		AssetFileDescriptor audioAsset = getContentResolver()
				.openAssetFileDescriptor(uri, "r");
		InputStream in = audioAsset.createInputStream();
		OutputStream out = new FileOutputStream(audioDst);
		byte[] buf = new byte[1024];
		int len;
		while ((len = in.read(buf)) > 0) {
			out.write(buf, 0, len);
		}
		in.close();
		out.close();
	} catch (Exception e) {
		e.printStackTrace();
	}
}
 

根據檔案的絕對路徑拷貝至指定路徑,可以使用如下方法:

public void copyFile(String oldPath, String newPath) { 
   try { 
       int bytesum = 0; 
       int byteread = 0; 
       File oldfile = new File(oldPath); 
       if (oldfile.exists()) { //檔案存在時 
           InputStream inStream = new FileInputStream(oldPath); //讀入原檔案 
           FileOutputStream fs = new FileOutputStream(newPath); 
           byte[] buffer = new byte[1024]; 
           while ( (byteread = inStream.read(buffer)) != -1) { 
               bytesum += byteread; //位元組數 檔案大小 
               System.out.println(bytesum); 
               fs.write(buffer, 0, byteread); 
           } 
           inStream.close(); 
           fs.close();
       } 
   } 
   catch (Exception e) { 
       System.out.println("複製單個檔案操作出錯"); 
       e.printStackTrace(); 

   } 

}
 

相關文章