在Java开发中,如果没有使用数据库时,常常会将内容保存在文件上面。 如用户的个人信息。 在保存的时候,需要有一定的格式进行保存,如用 \t 分开员工的每一个信息,用\n 分开每一个员工。 读取的时候,就必须按照相应的格式进行读取。
为了区分不同的平台存储时的差异, 使用与平台无关的两个类 DataOutputStream 和 DataInputStream 进行存储和读取。
一. DataOutputStream
一.一 方法
一.一.一 构造方法
一.一.一.一 方法
一.一.一.二 演示
@Test public void conTest() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"data.txt"); DataOutputStream dataOutputStream=new DataOutputStream( new FileOutputStream(file) ); }
一.一.二 写入方法
一.二 演示 DataOutputStream
将员工列表信息:
写入到文件里面。
@Test public void writeTest() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"data.txt"); //构造 DataOutputStream dataOutputStream=new DataOutputStream( new FileOutputStream(file) ); //id编号,姓名, 性别,年龄,描述。 int[] ids={1,2,3,4}; String[] names={"老蝴蝶","蝴蝶","岳泽霖","岳建立"}; char[] sexs={'男','男','男','男'}; int[] ages={20,21,22,23}; String[] descs={"一个好人","一个人","快乐的人","想要快乐的人"}; //遍历循环 for(int i=0;i<ids.length;i++){ //写入 int 类型的 id dataOutputStream.writeInt(ids[i]); dataOutputStream.writeChar('\t'); //写入 字符串类型的 name dataOutputStream.writeChars(names[i]); dataOutputStream.writeChar('\t'); //写入 字符类型的 sex dataOutputStream.writeChar(sexs[i]); dataOutputStream.writeChar('\t'); //写入 int 类型的 age dataOutputStream.writeInt(ages[i]); dataOutputStream.writeChar('\t'); //写入字符串类型的 desc dataOutputStream.writeChars(descs[i]); //换行 dataOutputStream.writeChar('\n'); } //关闭 dataOutputStream.close(); }
运行程序, 会发现 data.txt 文件内容:
这是什么,完全看不懂啊。
我们看不懂是对的,这样内容就安全了, 需要用 相对应的 DataInputStream 按照相同的格式进行解析即可。
二. DataInputStream
二.一 方法
二.一.一 构造方法
二.一.一.一 方法
二.一.一.二 演示
@Test public void readConTest() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"data.txt"); DataInputStream dataInputStream=new DataInputStream(new FileInputStream(file)); }
二.一.二 读取方法
二.二 演示 DataInputStream
@Test public void readTest() throws Exception{ File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"data.txt"); //构造 DataInputStream dataInputStream=new DataInputStream(new FileInputStream(file)); //开始读取 int[] ids=new int[4]; String[] names=new String[4]; char[] sexs=new char[4]; int[] ages=new int[4]; String[] descs=new String[4]; int i=0; boolean flag=true; //读取的格式,一定要一致。 while(flag){ //一直执行 //读id int id=-1; try{ id=dataInputStream.readInt(); }catch(Exception e){ //如果不能读取,即到最后了, 那么结束循环。 flag=false; break; } ids[i]=id; //读 char, 实际上读的是 \t dataInputStream.readChar(); //该name 了。 //最大长度为100 char[] tempChar=new char[100]; char temp=' '; int j=0; //没有到 下一个 \t 分隔符 while((temp=dataInputStream.readChar())!='\t'){ tempChar[j++]=temp; } names[i]=new String(tempChar,0,j); j=0; //已经通过 \t了,那么这儿读取的就是 性别了 sexs[i]=dataInputStream.readChar(); //读出的是 \t dataInputStream.readChar(); // 读年龄 ages[i]=dataInputStream.readInt(); //\t dataInputStream.readChar(); while((temp=dataInputStream.readChar())!='\n'){ tempChar[j++]=(char)temp; } descs[i]=new String(tempChar,0,j); } StringBuilder sb=new StringBuilder(); for(int j=0;j<ids.length;j++){ sb.append(ids[i]).append("\t") .append(names[i]).append("\t") .append(sexs[i]).append("\t") .append(ages[i]).append("\t") .append(descs[i]).append("\r\n"); } System.out.println(sb.toString()); } }
无法直接读取字符串, 需要通过
char temp=' '; int j=0; //没有到 下一个 \t 分隔符 while((temp=dataInputStream.readChar())!='\t'){ tempChar[j++]=temp; } names[i]=new String(tempChar,0,j);
进行处理。
运行程序,看控制台输出:
发现,可以正确地取出数据。
但有没有发现,这样太麻烦了,需要对格式进行非常正确的处理。
但是,这种将信息存储到文件里面的需求非常好,那该怎么办呢? 序列化。 下一章节,我们讲解一下这个序列化。
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!