作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 Windows 上遇到了这个令人讨厌的 Java 问题。 (Java on Linux 没有这个问题。)
在 Linux 上,作为 root 用户,我可以使用 new RandomAccessFile(new File("/dev/sdb"), "rw");
来读写 我的第二个驱动器的原始扇区。
在 Windows 上,作为管理员,我可以使用 RandomAccessFile(new File("//./PhysicalDrive1"), "r");
来读取 原始扇区相同的第二个驱动器。但是,如果我改为指定 "rw"
模式,我会得到一个 java.io.FileNotFoundException
。
我可以在 Windows 上使用 JNI+C 作为变通方法,但我想要一个非基于 DLL 的跨平台解决方案,它完全基于 Java。
有没有人对如何解决这个问题有任何提示?
编辑:
我得到的确切异常是关于某些“参数”是“不正确的”:
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 提到的here ,您可以尝试运行以下代码:
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();
关于Windows 上的 Java 无法写入 PhysicalDriveX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171778/
我在 Windows 上遇到了这个令人讨厌的 Java 问题。 (Java on Linux 没有这个问题。) 在 Linux 上,作为 root 用户,我可以使用 new RandomAccessF
我是一名优秀的程序员,十分优秀!