JAVA之文件光标移至开头

这次我们小组讨论了关于一个JAVA的问题,在进行文件写出的时候出现了一个问题,

代码如下:

package com.io;


import java.io.BufferedInputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

class Person implements Serializable{

       privatestatic final long serialVersionUID = 1L;

       privateString name;

       privatechar gender;

       privateint age;


       publicPerson() {

              super();

              //TODO Auto-generated constructor stub

       }

       publicPerson(String name, char gender, int age) {

              super();

              this.name= name;

              this.gender= gender;

              this.age= age;

       }

       publicString getName() {

              returnname;

       }

       publicvoid setName(String name) {

              this.name= name;

       }

       publicchar getGender() {

              returngender;

       }

       publicvoid setGender(char gender) {

              this.gender= gender;

       }

       publicint getAge() {

              returnage;

       }

       publicvoid setAge(int age) {

              this.age= age;

       }


}

public class TestInOut {

       publicstatic void main(String[] args) throws ClassNotFoundException {

              FileInputStreaminput=null;

              FileOutputStreamout=null;

              ObjectOutputStreamobjout=null;

              ObjectInputStreamobjinp=null;

              Personp=new Person("张飒",'男',20);


              try{

                     System.out.println(System.getProperty("user.dir"));

                      input=newFileInputStream("d:/data.txt");

                      out=newFileOutputStream("d:/outobj.txt");

                     objout=newObjectOutputStream(out);

                     objout.writeObject(p);

                     FileInputStreamoutobj=new FileInputStream("d:/outobj.txt");

                     objinp=newObjectInputStream(outobj);

                     StringBuildersb=new StringBuilder();

                     intdata;

                     while((data=outobj.read())!=-1){

                     sb.append((char)data);

                     }

                     System.out.println(sb);

                     Personl=(Person)objinp.readObject();

                     System.out.println(l);


              }catch (FileNotFoundException e) {

                     //TODO Auto-generated catch block

                     e.printStackTrace();

              }catch (IOException e) {

                     //TODO Auto-generated catch block

                     e.printStackTrace();

              }

              finally{

                     try{

                     if(input!=null)                    

                                   input.close();                      

                     if(out!=null)

                            out.close();

                     if(objout!=null)

                            objout.close();

                     if(objinp!=null)

                            objinp.close();

                     }catch(IOException e) {

                                   //TODO Auto-generated catch block

                                   e.printStackTrace();

                            }                   

              }

       }

}

我们发现,文件运行后出现错误


上面的代码是由


输出的,所以文件中的字节被输出来,但后面的却显示错误。

为此,我将前面的架空,想看看后面的代码能不能运算,结果成功了



于是我们小组开始各述己见,有人认为是文件名字打错了,还有人认为是代码中有错误,我觉得应该是文件的光标被read()方法弄到末尾,没有重新放到开头产生的错误。

但是,当我们寻找恢复光标的方法的时候却出现问题,在FileInputStream中是没有恢复光标的方法,恰好,老师刚好在课堂讲到,可以看看有没有继承父类方法,我们于是发现了mark()和reset(),但当我们用他们的时候,却被提示



显示不被支持,但是在帮助文档中却是继承父类方法,


我们尝试了多种方法,结果发现都不可行,

后来,我们在查到缓冲流时发现有路子,


我们尝试后发现可行



上面的输出时文件的字节输出,下面的是字符输出,

这次的事情提示我们,要注意将文件的光标向开头放置,不然会出现错误。

5Z00y���

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. Java基础部分.................................................
    wy_sure阅读 3,834评论 0 11
  • DAY 05 1、 public classArrayDemo { public static void mai...
    周书达阅读 743评论 0 0
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,504评论 0 13
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,723评论 0 3
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,436评论 0 10