我在Windows上运行Java这个讨厌的问题。 (Linux上的Java没有这个问题。)
在Linux上,作为root用户,我可以使用new RandomAccessFile(new File("/dev/sdb"), "rw");
读取和写入我的第二个驱动器的原始扇区。
在Windows上,作为pipe理员,我可以使用RandomAccessFile(new File("//./PhysicalDrive1"), "r");
读取相同的第二个驱动器的原始扇区。 但是,如果我指定了"rw"
模式,我得到一个java.io.FileNotFoundException
。
我可以在Windows上使用JNI + C作为解决方法,但是我想要基于Java的非基于DLL的跨平台解决scheme。
有没有人有任何提示如何解决这个问题?
编辑:
我得到的确切例外是关于一些“参数”是“不正确的”:
Exception in thread "main" java.io.FileNotFoundException: \\.\PhysicalDrive1 (The parameter is incorrect) at java.io.RandomAccessFile.open(Native Method) at java.io.RandomAccessFile.<init>(RandomAccessFile.java:241) at java.io.RandomAccessFile.<init>(RandomAccessFile.java:122) at MyTest.main(MyTest.java:100)
正如@ daniel-alder在这里提到的,你可以尝试运行下面的代码:
String pathname; // Full drive: // pathname = "\\\\.\\PhysicalDrive0"; // A partition (also works if windows doesn't recognize it): pathname = "\\\\.\\GLOBALROOT\\ArcName\\multi(0)disk(0)rdisk(0)partition(5)"; Path diskRoot = ( new File( pathname ) ).toPath(); FileChannel fc = FileChannel.open( diskRoot, StandardOpenOption.READ, StandardOpenOption.WRITE ); ByteBuffer bb = ByteBuffer.allocate( 4096 ); fc.position( 4096 ); fc.read( bb ); fc.position( 4096 ); fc.write( bb ); fc.close();