private File getFilePtr(String outName,String subFolder) throws IOException {
File filesDir = getApplicationContext().getFilesDir();
if (!filesDir.exists()) {
File outFileFolder = new File(filesDir.getAbsolutePath()+"/target/"+subFolder);
if(!outFileFolder.exists()) {
File outFile=new File(outFileFolder,outName);
String outFilename = outFile.getAbsolutePath();
Log.i(TAG, "outFile is " + outFilename);
boolean res = outFile.createNewFile();
Log.e(TAG, "outFile not exist!(" + outFilename + ")");
private int copyData(File outFile,InputStream is){
FileOutputStream fos = new FileOutputStream(outFile);
byte[] buffer = new byte[1024];
while ((byteCount = is.read(buffer)) != -1) {
fos.write(buffer, 0, byteCount);
public String getFilePathAfterCopy(Uri uri,String outName,String subFolder,boolean ifReturnParent){
File outFile=getFilePtr(outName,subFolder);
InputStream is= this.getContentResolver().openInputStream(uri);
if(0!=copyData(outFile,is)) {
return outFile.getParent();
return outFile.getPath();
public String getFilePathAfterCopy(int resId,String outName,String subFolder,boolean ifReturnParent) {
File outFile=getFilePtr(outName,subFolder);
InputStream is = getApplicationContext().getResources().openRawResource(resId);
if(0!=copyData(outFile,is)) {
return outFile.getParent();
return outFile.getPath();
} catch (IOException e) {
public String byteToString(byte[] data) {
for (int i = 0; i < data.length; i++) {
byte[] temp = new byte[index];
Arrays.fill(temp, (byte) 0);
System.arraycopy(data, 0, temp, 0, index);
str = new String(temp, "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
在Android FrameWork开发中我们常常要copy文件到特定目录中,本文实现了copy资源到特定目录的功能,