在我的示例中,如何取消java中的文件创建过程?
我正在创建一个指定大小的空文件,如下所示在我的示例中,如何取消java中的文件创建过程?,java,io,randomaccessfile,Java,Io,Randomaccessfile,我正在创建一个指定大小的空文件,如下所示 final long size = 10000000000L; final File file = new File("d://file.mp4"); Thread t = new Thread(new Runnable() { @Override public void run() { try { RandomAccessFile raf = new RandomAccessFile(file,
final long size = 10000000000L;
final File file = new File("d://file.mp4");
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
RandomAccessFile raf = new RandomAccessFile(file, "rw");
raf.setLength(size);
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.start();
对于5GB或更小或更大的尺寸,这个过程在android设备上需要更多的时间。现在我的问题是,我怎样才能随时取消创建文件的过程?
谢谢。raf.setLength调用引擎盖下搜索,这是一个本机函数,因此不清楚该操作是否可以通过中断或其他方式取消
您是否可以自己创建文件,例如:
final long size = 10000000000L;
final File file = new File("d://file.mp4");
volatile boolean cancelled = false;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
long bytesRemaining = size;
long currentSize = 0;
RandomAccessFile raf = new RandomAccessFile(file, "rw");
try {
while ( bytesRemaining > 0 && !cancelled ) {
// !!!THIS IS NOT EXACTLY CORRECT SINCE
// YOU WILL NEED TO HANDLE EDGE CONDITIONS
// AS YOU GET TO THE END OF THE FILE.
// IT IS MEANT AS AN ILLUSTRATION ONLY!!!
currentSize += CHUNK_SIZE; // you decide how big chunk size is
raf.setLength(currentSize);
bytesRemaining -= CHUNK_SIZE
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.start();
// some other thread could cancel the writing by setting the cancelled flag
免责声明:我不知道在您创建的文件大小下这会有什么样的性能。对于每个要查找的调用,它可能会有一些开销。尝试一下,看看性能如何。我想最好的办法是取消正在运行的Runnable,创建有问题的文件。非常感谢。这是最好的解决办法X