在我的示例中,如何取消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