다음은 example을 사용하여 db를 SD 카드로 내보내는 방법입니다. SD 카드에 파일을 만들 수 있지만 내용은 비어 있습니다. 데이터베이스 파일을 읽을 수 있는지 확인하고 SD 소스에 쓸 수 있습니다.안드로이드 수출 데이터베이스 - SD 카드 - 빈 파일
예외가 내 전송 방법에 걸려 있지만 메시지는 로그 고양이 예외에 대한 추가 정보가 표시되지 않습니다 null
입니다.
데이터가 대상 파일로 전송되지 않는 이유는 무엇입니까?
public boolean transferFile(File src, File dest){
boolean flag = false;
FileChannel inChannel=null;;
FileChannel outChannel=null;
if(!dest.canWrite()){
Log.d(TAG, "unable to write to: " + dest.getPath());
return false;
}
try{
inChannel = new FileInputStream(src).getChannel();
outChannel = new FileInputStream(dest).getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
//outChannel.transferFrom(inChannel, 0, inChannel.size());
flag = true;
if(inChannel !=null){
inChannel.close();
}
if(outChannel !=null){
outChannel.close();
}
} catch (IOException e){
Log.d(TAG, "Unable to transfer file IOException: " + e.getMessage());
} catch (Exception e){
Log.d(TAG, "Unable to transfer file Exception: " + e.getMessage());
}
return flag;
}
스택 트레이스 :
transferFile() Unable to transfer file Exception: java.nio.channels.NonWritableChannelException
at java.nio.FileChannelImpl.checkWritable(FileChannelImpl.java:85)
at java.nio.FileChannelImpl.transferTo(FileChannelImpl.java:399)
at com.test.activity.TestActivity$ExportDBTask.transferFile(TestActivity.java:250)
at com.test.activity.TestActivity$ExportDBTask.doInBackground(TestActivity.java:187)
at com.test.activity.TestActivity$ExportDBTask.doInBackground(TestActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
TestActivity.java:250 inChannel.transferTo는 (0, inChannel.size() outChannel)에 대응하고;
붙여 넣기 스택 트레이스는 여기에 있습니다. –
패키지 및 db 이름을 올바르게 입력 했습니까? – itsrajesh4uguys
@Real 스택 추적 추가 – Santiago