文件被删除而不被复制
File deleted without getting copied
我正在尝试将一些文件复制到 SD 卡,然后将其删除。但是很多时候文件没有被复制,只是被删除了。
还有很多次 FileInputStream
为空,因为我正在检查必须传输的文件是否存在以及是否可写。
这是我用来移动文件的代码
public static void move(final File remove,final DocumentFile move_to_folder) {
final String mime = MimeTypes.getMimeType(remove);
final DocumentFile move = move_to_folder.createFile(mime, remove.getName());
try {
inStream = new FileInputStream(remove);
outStream =
con.getApplicationContext().getContentResolver().openOutputStream(move.getUri());
final byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(inStream!=null)
{
inStream.close();
}
if(outStream!=null)
{
outStream.close();
}
delete(remove);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
我一次传输很多文件,所以我在异步任务中使用这段代码。
任何帮助将不胜感激。
如果你有例外,删除会被删除而不考虑
考虑添加一个布尔标志来防止这种情况发生
例如
在 try 块之前添加
boolean canDelete = true;
如果您设置了例外
canDelete = false;
然后在最后检查这个布尔值
if (canDelete)
delete(remove);
我正在尝试将一些文件复制到 SD 卡,然后将其删除。但是很多时候文件没有被复制,只是被删除了。
还有很多次 FileInputStream
为空,因为我正在检查必须传输的文件是否存在以及是否可写。
这是我用来移动文件的代码
public static void move(final File remove,final DocumentFile move_to_folder) {
final String mime = MimeTypes.getMimeType(remove);
final DocumentFile move = move_to_folder.createFile(mime, remove.getName());
try {
inStream = new FileInputStream(remove);
outStream =
con.getApplicationContext().getContentResolver().openOutputStream(move.getUri());
final byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(inStream!=null)
{
inStream.close();
}
if(outStream!=null)
{
outStream.close();
}
delete(remove);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
我一次传输很多文件,所以我在异步任务中使用这段代码。
任何帮助将不胜感激。
如果你有例外,删除会被删除而不考虑
考虑添加一个布尔标志来防止这种情况发生
例如
在 try 块之前添加
boolean canDelete = true;
如果您设置了例外
canDelete = false;
然后在最后检查这个布尔值
if (canDelete)
delete(remove);