如题。
急,急,急!!

解决方案 »

  1.   

    先获取到SD卡的路径,然后用java的流操作读写。
      

  2.   

    这个需要用 JNI 来实现,需要写一个本地so库。
      

  3.   

    通过JNI 你可以打开磁盘设备然后可以用 read/write 系统调用来读写扇区
    如:
    int fn=open("/dev/sda","rb");
    char buffer[2000];
    lseek(fd,0,SEEK_SET);  
    read(fd,buffer,2000);...close(fd);但这需要 root权限 或disk 组权限,普通权限应用是无法访问的。
      

  4.   

    你破了也没用啊,呵呵。java 代码做不到读写扇区的,编写JNI 需要有linux 下c/c++ 语言编程经验, 给你个网址有JIN 参考。http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html
      

  5.   


    这种方法是直接读/写的扇区吗?怎么感觉和WINDOWS下的不太一样,WINDOWS下可以指定扇区号进行读写,但这种方法看起来还是在进行文件操作,只不过"文件"是一个设备.如果要读取指定的扇区还得将扇区号换算成位置.
    所以有些不明白:这种方式能直接操作扇区而不经过系统的文件缓存吗?
      

  6.   

    内置SD卡直接读写就是了,路径有绝对路径字符串,读写U盘这个其实就是将U盘挂载到android系统,通过文件系统统一管理,查查有木有相应的读写外部存储的接口
      

  7.   

    中文的好像没有,你可以去网上搜点例子什么的。
    你在android 下开发jni 需要下载ndk,ndk 中有代码示例,不过注释是全英文的。
    http://developer.android.com/tools/sdk/ndk/index.html
      

  8.   

    这是我写读取扇区的例子,在ubuntu 下测式通过。
    执行前请用 chmod 666 **** 改变设备访问权限或提升应用权限到 root.
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <errno.h>
    #include <fcntl.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/ioctl.h>
    #include <linux/fs.h>using namespace std;int main() { unsigned char *buffer;
    size_t sector_size = 0; int fd = open("/dev/sda",O_RDONLY); if (fd == -1)
    {
    printf("Open \"/dev/sdb\" failed. %s\n",strerror(errno));
            return errno;
    } //获取每个扇区大小
    ioctl(fd, BLKSSZGET, &sector_size);
    printf("sector size: %d\n",(unsigned int)sector_size);
    buffer = (unsigned char*)malloc(sector_size); //读取从扇区,i 为扇区的索引。
    for (unsigned int i=0;i<8;i++)
    {
    lseek(fd,i * sector_size ,SEEK_SET);
    if (read(fd,buffer,(unsigned int)sector_size) < 0)
    {
    printf("Read sectors failed. %s\n",strerror(errno));
            break;
    }
    printf("sectors: %d\n",i);
    for (unsigned int col=0;col < sector_size/16;col++)
    {
    int base = col * 16;
    printf("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n",
    buffer[base + 0x0],
    buffer[base + 0x1],
    buffer[base + 0x2],
    buffer[base + 0x3],
    buffer[base + 0x4],
    buffer[base + 0x5],
    buffer[base + 0x6],
    buffer[base + 0x7],
    buffer[base + 0x8],
    buffer[base + 0x9],
    buffer[base + 0xA],
    buffer[base + 0xB],
    buffer[base + 0xC],
    buffer[base + 0xD],
    buffer[base + 0xE],
    buffer[base + 0xF]);
    }
    printf("\n");
    } free(buffer);
    close(fd); return errno;
    }输出如下:
    sector size: 512
    sectors: 0
    EB 63 90 10 8E D0 BC 00 B0 B8 00 00 8E D8 8E C0
    FB BE 00 7C BF 00 06 B9 00 02 F3 A4 EA 21 06 00
    00 BE BE 07 38 04 75 0B 83 C6 10 81 FE FE 07 75
    F3 EB 16 B4 02 B0 01 BB 00 7C B2 80 8A 74 01 8B
    4C 02 CD 13 EA 00 7C 00 00 EB FE 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00
    00 00 00 00 FF FA 90 90 F6 C2 80 74 05 F6 C2 70
    74 02 B2 80 EA 79 7C 00 00 31 C0 8E D8 8E D0 BC
    00 20 FB A0 64 7C 3C FF 74 02 88 C2 52 BB 17 04
    80 27 03 74 06 BE 88 7D E8 17 01 BE 05 7C B4 41
    BB AA 55 CD 13 5A 52 72 3D 81 FB 55 AA 75 37 83
    E1 01 74 32 31 C0 89 44 04 40 88 44 FF 89 44 02
    C7 04 10 00 66 8B 1E 5C 7C 66 89 5C 08 66 8B 1E
    60 7C 66 89 5C 0C C7 44 06 00 70 B4 42 CD 13 72
    05 BB 00 70 EB 76 B4 08 CD 13 73 0D F6 C2 80 0F
    84 D0 00 BE 93 7D E9 82 00 66 0F B6 C6 88 64 FF
    40 66 89 44 04 0F B6 D1 C1 E2 02 88 E8 88 F4 40
    89 44 08 0F B6 C2 C0 E8 02 66 89 04 66 A1 60 7C
    66 09 C0 75 4E 66 A1 5C 7C 66 31 D2 66 F7 34 88
    D1 31 D2 66 F7 74 04 3B 44 08 7D 37 FE C1 88 C5
    30 C0 C1 E8 02 08 C1 88 D0 5A 88 C6 BB 00 70 8E
    C3 31 DB B8 01 02 CD 13 72 1E 8C C3 60 1E B9 00
    01 8E DB 31 F6 BF 00 80 8E C6 FC F3 A5 1F 61 FF
    26 5A 7C BE 8E 7D EB 03 BE 9D 7D E8 34 00 BE A2
    7D E8 2E 00 CD 18 EB FE 47 52 55 42 20 00 47 65
    6F 6D 00 48 61 72 64 20 44 69 73 6B 00 52 65 61
    64 00 20 45 72 72 6F 72 0D 0A 00 BB 01 00 B4 0E
    CD 10 AC 3C 00 75 F4 C3 40 64 06 00 00 00 80 20
    21 00 83 FE FF FF 00 08 00 00 00 00 80 03 00 FE
    FF FF 05 FE FF FF FE 0F 80 03 02 E8 3F 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AAsectors: 1
    52 E8 28 01 74 08 56 BE 33 81 E8 4C 01 5E BF F4
    81 66 8B 2D 83 7D 08 00 0F 84 E9 00 80 7C FF 00
    74 46 66 8B 1D 66 8B 4D 04 66 31 C0 B0 7F 39 45
    08 7F 03 8B 45 08 29 45 08 66 01 05 66 83 55 04
    00 C7 04 10 00 89 44 02 66 89 5C 08 66 89 4C 0C
    C7 44 06 00 70 50 C7 44 04 00 00 B4 42 CD 13 0F
    82 BB 00 BB 00 70 EB 68 66 8B 45 04 66 09 C0 0F
    85 A3 00 66 8B 05 66 31 D2 66 F7 34 88 54 0A 66
    31 D2 66 F7 74 04 88 54 0B 89 44 0C 3B 44 08 0F
    8D 83 00 8B 04 2A 44 0A 39 45 08 7F 03 8B 45 08
    29 45 08 66 01 05 66 83 55 04 00 8A 54 0D C0 E2
    06 8A 4C 0A FE C1 08 D1 8A 6C 0C 5A 52 8A 74 0B
    50 BB 00 70 8E C3 31 DB B4 02 CD 13 72 50 8C C3
    8E 45 0A 58 C1 E0 05 01 45 0A 60 1E C1 E0 03 89
    C1 31 FF 31 F6 8E DB FC F3 A5 1F E8 3E 00 74 06
    BE 3B 81 E8 63 00 61 83 7D 08 00 0F 85 1D FF 83
    EF 0C E9 0F FF E8 24 00 74 06 BE 3D 81 E8 49 00
    5A EA 00 82 00 00 BE 40 81 E8 3D 00 EB 06 BE 45
    81 E8 35 00 BE 4A 81 E8 2F 00 EB FE BB 17 04 80
    27 03 C3 6C 6F 61 64 69 6E 67 00 2E 00 0D 0A 00
    47 65 6F 6D 00 52 65 61 64 00 20 45 72 72 6F 72
    00 BB 01 00 B4 0E CD 10 46 8A 04 3C 00 75 F2 C3
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 02 00 00 00 00 00 00 00 65 00 20 08
    ....
    ....
    .... 太多了不粘了 
      

  9.   

    我是用 O_RDONLY “只读"打开的,你要是想写的话可以指定为 O_RDWR。但切记,不要乱写否则后果自,呵呵。
      

  10.   

    必须得自己定义一个驱动,然后定义一个库so文件,接着JNI,最后JAVA才能访问
    只是有个问题,SD卡默认已经被打开了,你在定义个驱动来打开的话,不知道会不会有错误
    我最近刚做一个通过JNI访问模拟硬件的例子
      

  11.   

    不用自定义驱动的,android 下所有要可识别的存储设备都会在 /dev 下创建节点的。
      

  12.   

    你说得很对,这个问题我想了很久了,还有你的读写SD卡扇区的例子可以发给我吗?
    还有SD卡驱动是那个文件里的
    [email protected]
    谢谢了
      

  13.   

    驱动在哪个文件里我没研究过,应该是在linux 内核代码的fs 目录下的文件里。