本文记录利用java 字节流把对象保存本地文件,然后读取到对象中。旨在练习常用javaio操作。
用到的java io流如下:
BufferedOutputStream 输出缓冲流,可以包装一个输出流,优化流的写入效率。
DataOutputStream 二进制输出流,可以包装一个输出流,用于向文件写入二进制数据。
BufferedInputStream 数据缓冲流,可以包装一个输入流,优化流的读取效率。
DataInputStream可以包装一个输入流,用于读取二进制内容。
代码如下:
//测试代码
public class TestIO {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<User> users = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.name = "张文X" + i;
user.id = i;
users.add(user);
}
// 新建文件
File file = new File("user.data");
boolean isExits = file.exists();
if (!isExits) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
if (file.exists()) {
// 写数据
BufferedOutputStream bufferOut = null;
DataOutputStream dataOut = null;
Path path = Paths.get(file.getPath());
try {
bufferOut = new BufferedOutputStream(
Files.newOutputStream(path));
dataOut = new DataOutputStream(bufferOut);
dataOut.writeInt(users.size());
for (User user : users) {
user.write(dataOut);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
Utils.close(dataOut);
}
// 读数据
BufferedInputStream bufferInput = null;
DataInputStream dataInput = null;
try {
bufferInput = new BufferedInputStream(
new FileInputStream(file));
dataInput = new DataInputStream(bufferInput);
int size = dataInput.readInt();
List<User> readUsers = new ArrayList<User>();
for (int i = 0; i < size; i++) {
User user = new User();
user.read(dataInput);
readUsers.add(user);
}
printUser(readUsers);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Utils.close(dataInput);
}
}
}
/**
* @param users
* 打印读取数据
*/
public static void printUser(List<User> users) {
for (User user : users) {
System.out.println(user.toString());
}
}
}
//关闭流工具类
public class Utils {
// 关闭流
public static void close(Closeable... clos) {
for (Closeable clo : clos) {
try {
clo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//user实体类
public class User {
public String name;
public int id;
//写入数据
public void write (DataOutputStream out) throws IOException{
out.writeUTF(name);
out.writeInt(id);
}
//读取数据
public void read(DataInputStream input) throws IOException{
name = input.readUTF();
id = input.readInt();
}
@Override
public String toString() {
return "User [name=" + name + ", id=" + id + "]";
}
}
运行结果:
希望本文对你有所帮助