请问用什么方式把一个int(4位)整数写入文件,写入后文件的大小为4个字节,并且用文本查看器可以读出来数据。我尝试了各种方法的各种编码去写入,要么就是一个字节,要么就是4个字节但是用文本查看器打开有乱码,特地请高手赐教!

解决方案 »

  1.   

    有种方法写入后是一个字节,能看到数字,但是好像是以字符串的方式写入的。我的需求能实现,我在做android开发,在系统sys文件夹下的很多配置文件就是这样,4个字节,我用文本查看器打开,能直接看到数字,可是写入就是不对,找不到合适的方法,试验了N中方法还是不行
      

  2.   


    应该不大可能,用010 Editor或者UE 用十六进制的格式看一下,确定只占了4个byte?是的话,应该可以看出存储方式。
      

  3.   

    你只是要写入一个 4位数?比如 0000~9999 ?那么直接:
    FileWriter fw= new FileWriter("test.txt");
    fw.write(String.valueOf(1234));
    fw.close();
      

  4.   

    LZ在说的是16进制字符串吧...看的到的4字节...笑... int i = 123456789;
    File file = new File("f:/1.txt");
    FileOutputStream os = new FileOutputStream(file); try {
    os.write(String.format("%08X", i).getBytes());
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    os.close();
    }
      

  5.   

    难道是因为那是android系统文件的缘故么,我读出来的四个字节分别是49,10,0,0.但是我按照这个顺序再写入一个文件,结果用文本编辑器打开却有乱码,而原本的数据却没有,想不通……
      

  6.   

    可以把数可以转成byte再写入文件
    LZ的4位是不是指4比特?
      

  7.   

    文件都是以二进制形式保存在磁盘中的,windows下文本查看器用的是GBK编码进行查看文件的。
    所以你必须先转成字符串(GBK), 而文件的存储大小与系统所采用的存储文件系统有关。
      

  8.   


    我采用GBK编码方式依然达不到之前我说的那个效果,莫非根本就做不到那样?那为什么android系统文件都是这样?晕死……
      

  9.   

    上代码,接分
    public static void main(String[] args) {
    String kk = "1234";
    ByteBuffer buffer = ByteBuffer.wrap(kk.getBytes());
    try {
    RandomAccessFile accessFile = new RandomAccessFile(
    "D://chablis.txt", "rw");
    ByteBuffer byteBuffer = accessFile.getChannel().map(
    MapMode.READ_WRITE, buffer.position(), buffer.limit());
    byteBuffer.put(buffer);
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
      

  10.   

    我想普及一下基本常识,这个问题关键根本不在于int的的范围能不能放下,顺便甩2楼脸!你是不是程序员?
    一个int型到底占几个字节,这不取决于语言或是什么的,取决于CPU是机器字长
    8位的CPU,8位等于1字节
    16位的CPU,16位等于1个字节
    以此类推
    为什么呢,因为计算机中最小的单位就是bit!哪怕你要存再小的数据,比如你要存个int 1
    在8位CPU里,就是0000-0001 在16位里就是00000000-00000001
    前者占1个字节,后者占1个字,也就是2个字节。虽然都表示一个int型
    8位CPU里,最大只能放 2^8次方,-255~255 LZ说要放4位数的int型
    倒过来推,拿出你的计算机,输入9999,然后转成2进制是多少0010 0111 0000 1111
    也就是说,其实我只需要2个字节就足够放这些数据了,既然楼主给了4个字节,为什么不能放?2楼
    知道为什么教科书上说int = 4 个字节,因为现在32位的计算机普及了,32/8 = 4 明白?
    楼主的关键问题在于什么!输入跟输出完全不是一码事!你用文本编辑器,去打开这个文件,文本编辑器,默认能看懂的都是字符串,你往里面写的是int,你往外面读的是String 能看懂就奇怪了!就好比你用ISO-8859-1 去对于一个字符串编码,然后用UTF-8解码,你看到的可能一样吗?这只是个例子,极端情况下也可能一样!
    总之,输入跟输出要保持一致
      

  11.   

    现在我写入一个int数据,4字节public static void main(String[] args) {
    try {
    RandomAccessFile accessFile = new RandomAccessFile(
    "D://chablis.txt", "rw");
    ByteBuffer buffer2 = accessFile.getChannel().map(
    MapMode.READ_WRITE, 0, 4);
    buffer2.asIntBuffer().put(5421);
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }这里面放的是Int
      

  12.   

    我也顺便甩你的脸
    即使是64位系统上 int依然是4字节宽
    然后处理器位数指的是一次处理的字节长
    按照你的这个算法,现在买的64位CPU就根本不能处理所有2年前开发的任何程序了还有你先搞明白CPU位数和操作系统位数再来甩人脸吧
      

  13.   

    以int的方式读出来
    public static void main(String[] args) {
    try {
    RandomAccessFile accessFile = new RandomAccessFile(
    "D://chablis.txt", "rw");
    ByteBuffer buffer2 = accessFile.getChannel().map(
    MapMode.READ_WRITE, 0, 4);
    int k = buffer2.asIntBuffer().get();
    System.out.println(k);
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    输入输出要一致
    还有笑喷,楼上2位!
    尼玛,纯2B! 你定义个int型,要向内存中开辟空间吗?最小单位就这么大。必然你定义的就是这么大,要么你就别定义
    好比你去买个东西,捆绑销售的!包装盒里一个洗发水,一个护发素!你跟人家说,我只要护发素,人家睬你? 这个包装就是最小单位,没有散装的!
    你要不信,你自己去测嘛!再懒一点,你可以百度嘛!2B。你看看长度跟机器字长有没有关系!
    再说了,楼主的疑问的关键根本不在这个上面。求看重点
    我突出的就是 楼主说:我尝试了各种方法的各种编码去写入,要么就是一个字节,要么就是4个字节但是用文本查看器打开有乱码真尼玛2的不行
      

  14.   

    别在那里满嘴喷粪的,高玩同学8位的CPU,8位等于1字节
    16位的CPU,16位等于1个字节16位等于1字节这种天才设想也只有你能造出来了
    64位CPU是不是64位等于1字节啊,穿越的不是一点点啊,不同次元的生物吧
      

  15.   


    弱弱的问一句,int类型在java中占用的位数是由java虚拟机决定的吧?貌似不是CPU。关于楼主的问题,输出的时候,保持四字节,那就前面都加上0吧,反正为的是看懂,输出到文件的是字符串,这个估计是最笨最简单的方法了。