开发技术技术文程序员

Java中的 I/O(Input/Output)简单运用

2016-05-17  本文已影响590人  JC_Hou

Java中的I/O主要为两类:

1.序列化和解序列化

必须实现serializable接口,且当对象被序列化时,被该对象引用的实例变量也会被序列化,且所有被引用的对象也会被序列化。
序列化是全有或者全无的,

输出:(序列化)
2016-05-16_104156.jpg
import java.io.*;
public class Student implements serializable{
    public String num;
    public int age;//这两个属性会被保存
    public Student(String num,int age){
        this.num=num;
        this.age=age;
    }
/*class Teacher{
 * ...
 *   }     此类没有继承serializable
 */
    public static void main(String [] args){
        Student xiaoming=new Student("30",20);
        Teacher teacher=new Teacher();       
        //会抛出异常,需要使用try,catch包裹
        try{
        FileOutputStream fs=new FileOutputStream("data.ser");//不存在就会创建
        ObjectOutputStream os=new ObjectOutputStream(fs);
        os.writeObject(xiaoming);
        //os.writeObject(teacher);如果这里在输出一个Teacher实例,就会报错,因为没有继承serializable
        os.close();//写完数据需要关闭
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}```
FileOutputStream fs=new FileOutputStream("data.ser");// .后面是文件类型
        ObjectOutputStream os=new ObjectOutputStream(fs);
        os.writeObject(具体对象);
        os.close();
这几行代码就是实现序列化输出数据的核心。

**如果某个实例变量不能或不应该被序列化,就把它标记成transient(瞬时的),这样就可以在序列化过程中跳过该实例**

如下:

class Teacher implements serialize{
String name;
transient int age;//这个变量就是不会被序列化的
}```

输入:(解序列化)
2016-05-17_124039.jpg
import java.io.*;
public class Test{
    public static void main(String [] args){
        try{
        FileInputStream fis=new FileInputStream("data.ser");//不存在就会创建
        ObjectInputStream is=new ObjectInputStream(fis);
        Student xiaoming=(Student)is.readObject();//需要强制类型转换
        System.out.println(xiaoming.age);//结果为20
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}```
FileInputStream fis=new FileInputStream("data.ser");
        ObjectInputStream is=new ObjectOutputStream(fis);
        Student xiaoming=(Student)is.readObject();

这几行代码就是解序列化输入数据的核心
####2.将数据写入纯文本
######输出
需要创建一个File对象:File file=new File("data.txt");

import java.io.*;
public class WriteAFile{
public static void main(String [] args){
try{
File file=new File("data.txt");//创建一个File对象
FileWriter filewriter=new FileWriter(file);//filewriter.write()也可以写入数据,但BufferedWriter效率更高
BufferedWriter writer=new BufferedWriter(fileWriter);//缓冲区可以暂存一些数据,然后到写满时同时写入
String data=...//一些具体操作,不只这一行这么简单
writer.write(data)
writer.close();//同样的,结束需要关闭
}catch(Exception e){
e.printStackTrace();
}
}
}```

输入
import java.io.*;
public class ReadAFile{
    public static void main(String [] args){
        try{
        File file=new File("data.txt");//创建一个File对象
        FileReader fileReader=new FileReader(file);
        BufferedReader reader=new BufferedReader(fileReader);//BufferedReader效率更高
        String line=null;//创建line字符接收数据
        StringBuilder responce=new StringBuider();//创建StringBuider对象来接收内容
        while((line=reader.readLine())!=null){//reader.readLine()读取数据
            responce=null;
        }
        reader.close();//同样的,结束需要关闭
        System.out.println(responce.toString());
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}```

上述大致呈现了一些I/O的简单操作,欢迎指出缺陷。
上一篇 下一篇

猜你喜欢

热点阅读