0

在 Java 中将 USB 闪存作为 RandomAccessFile 打开时存在 seek、length 和 setLength 方法的问题。代码的小例子:

    try {
        RandomAccessFile raf = new RandomAccessFile("\\\\.\\G:", "r");
        raf.seek(10);
        raf.setLength((long) 0);
        System.out.println(raf.length());
    }
    catch (FileNotFoundException ex) {
        Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
    }
    catch (IOException ex) {
        Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
    }

或者还有另一个问题。此代码引发 FileNotFoundException,但我可以在 Windows 中打开此路径并查看文件:

    try {
        File file = new File("G:\\");
        RandomAccessFile raf = new RandomAccessFile(file, "r");
    }
    catch (FileNotFoundException ex) {
        Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
    }
    catch (IOException ex) {
        Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
    }

我能做些什么来解决这个问题?必须将闪存设备作为 RandomAccessFile 打开才能使用 Fat32-lib 使用它

4

2 回答 2

0

G:\ 是一个目录!

您应该使用 file.list() 或 file.listFiles() 来获取该目录的所有条目。

当您想知道文件是否是目录时,请使用 file.isDirectory()...

于 2014-02-11T10:45:37.727 回答
0

从这个http://support.microsoft.com/kb/100027/en-us

“在执行直接磁盘 I/O 时,您必须在设备扇区大小的倍数和扇区边界上查找、读取和写入。”

当然你不能使用“setLength”,因为你不能用软件改变闪存设备的物理长度!

无论如何,在您的示例中,您使用只读标志打开设备:您无法更改大小。

于 2014-02-11T11:03:44.170 回答