Java数据存入文件和读取文件

  在Java程序开发过程中我们发现并不能够让程序多次运行时获得上一次关闭程序前的运行结果——我们没有将运行的结果加以保存。这个时候我们就要找到Java操作读取数据的方法(以操作文件为例):Java中的输入/输出模型,I/O模型又称为I/O流。(以下简称I/O流)。

  流按方向可以分为输入(input)和输出(output)2种。输入和输出是相对的,这里我们是站在程序的角度来看的,将程序的数据写到文件就是输出,从文件中读取数据就是输入。

  按类型(大小)可以分为字节型(byte)和字符型(byte)2种,字符流对象类型为Reader和Writer,字节流对象的类型为InputStream和OutputStream。我们知道字符(char)的大小是字节(byte)的两倍,但是这不是说字符型的I/O流就要比字节型的适用范围更广。具体地说,字符型的I/O流只有在操作纯文本(TXT)文件的时候才适用,并且不包括word等文件;除了TXT文件之外,其他类型的文件在被计算机解析的时候都会当做字节码处理,也就是由二进制的1和0组成,此时文件的读取用字符类型I/O流就不合适。实际使用中我们要根据文件的类型(是否TXT)来选择所使用的I/O流类型。

  按作用分类又可以分为节点流(如FileInputStream)和操作流(如ObjectInputStream)2种。节点是指流两端链接的可以是文件或者是其他的对象,节点流就是直接链接两个操作对象的流。而操作流不能连接两个操作对象,它必须依附与某种节点流而使用,它的功能是指定所需传送的数据的传送形式。

  Java中,能够直接操作文件的常见有Properties类型的集合,Properties对象调用这个类型的.store(参数)方法 和load(参数)方法,参数位置放一个I/O流对象即可对文件进行存取操作。而实际使用中我们将各种类型的数据转换成Properties类型的数据会非常麻烦。这个时候我们就需要能够将数据已对象的形式进行存取的一种I/O流,也就是上文中讲的操作流。

  此处详细讲一下操作流(ObjectOutputStream和ObjectInputStream)。

  有一点需要注意的是,将对象写到文件时需要先让对象继承Serializable接口,该接口不需要重写任何方法,仅仅是作为该对象可被序列化的标识。若要使对象重的某个属性不可被序列化,需要再该属性前加上可选修饰符——transient关键字。以下为操作流的具体用法。

  ObjectIOututStream oos = null;   //定义一个操作流对象,名为oos

  oos = new ObjectIOututStream(new FileIOutputStream("abc.Dos");

  //初始化oos  (此处应该捕获异常,篇幅有限,从略);

  //构造方法中传入一个节点流对象;

  //节点流中参数为String类型的文件路径

  ois.writeObject(参数);  //调用writeObject()方法,参数为已经实现了Serializable接口的对象

  这样我们就完成了见对象存为未见的操作。  

  ObjectInputStream ois = null;   //定义一个操作流对象,名为ois

  ois = new ObjectInputStream(new FileInputStream("abc.Dos");

  //初始化ois  (此处应该捕获异常,篇幅有限,从略);

  //构造方法中传入一个节点流对象;

  //节点流中参数为String类型的文件路径

  Object obj = ois.readObject();  //调用readObject()方法,返回Object类型的对象,按需可以强转

  这样 就完成了从文件中读取对象的操作。

  总之,我们要确定所要做的时确定输入还是输出,是字符流还是字节流,是那种类型,目的地或者数据源,然后按步骤调用方法完成数据的存取即可。

  

  

时间: 2024-08-27 13:34:38

Java数据存入文件和读取文件的相关文章

Node以数据块的形式读取文件

在Node中,http响应头信息中Transfer-Encoding默认是chunked. Transfer-Encoding:chunked Node天生的异步机制,让响应可以逐步产生. 这种发送数据块的方式在涉及到io操作的情况下非常高效.Node允许以数据块的形式往响应中写数据,也允许以数据块的形式读取文件. 这样可以有高效的内存分配,不需要把文件全部读取到内存中再全部响应给客户,在处理大量请求时可以节省内存. var http = require('http'); var fs = re

Java开发之I/O读取文件实例详解

在java开发或者android开发中,读取文件是不可避免的,以下对java开发中读取文件做了归纳和详解: 1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileN

Java FileReader使用相对路径读取文件

Java FileReader使用相对路径读取文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 在进行编程时需要时常更换主机进行测试,如果使用绝对路径则需要经常更改,为此使用相对路径是一个不错的选择.但是使用./,../或.\\,..\\的方式会经常出现未找到文件的错误 需要读取的文件路径为 项目根目录\experiment\1.txt 解决方案 使用System.getProperty("user.dir")获取当前程序运行的工作根目录 使用File.separator表

通过codehaus来实现json写入文件和读取文件成json对象

原文:通过codehaus来实现json写入文件和读取文件成json对象 代码下载地址:http://www.zuidaima.com/share/1550463256562688.htm pom.xml需要增加如下依赖: <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-lgpl</artifactId> <version>1.

文件_ _android从资源文件中读取文件流并显示的方法

======== 1   android从资源文件中读取文件流并显示的方法. 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private void doRaw(){ InputStream is = this.getResources().openRawResource(R.raw.ziliao); try{ doRead(is); }catch(IOException e){ e.printStackTrace(); } } pri

(转)Java按指定行数读取文件

package test import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; public class ReadSelectedLine{ // 读取文件指定行. static void readAppointedLineNumber(File sourceFile, int lineNumber) throws IOExcepti

java中使用相对路径读取文件的写法总结 ,以及getResourceAsStream() (转)

https://blog.csdn.net/my__sun_/article/details/74450241 读取文件的写法,相对路径 在当前的目录结构中读取test.txt的有四种写法 简单粗暴的 File file = new File("src/test.txt") 使用类的相对路径 使用当前线程的类加载器 读取web工程下的文件 使用getRealPath()读取 File file = new File("src/test.txt"); File fil

java非常好用的读取文件的流的代码

学过java的都知道java中有非常多的读取文件流的操作.这个要回到javase的io操作了.io流说实话,初学者学的肯定会非常混乱,那么多流,什么输入流,输出流,什么文件流,什么字节流,等等.我在这里只能简单的给大家普及一下java的文件操作了.最后再介绍哪种方式读取文件的方法好用. 首先是File对象,File对象只是一个文件对象,比如你要操作哪个文件,就new File("传入文件的路径和名字"),要不然程序怎么能知道你要读的是哪个文件呢,或者要把哪段内容写入到哪个文件呢?,Fi

文件操作--读取文件

1.文件的读取操作:从文件中读取数据到计算机内存中 read():返回值为包含整个文件内容的一个字符串 readline():返回值为文件下一行内容的字符串 readlines():返回值为整个文件内容的列表,每项是以换行符为结尾的一行字符串 文件的遍:1: f = open('temp.txt', 'r') for line in f.readlines(): # 处理一行数据 pass f.close() 文件的遍历2: f = open('tmp.txt', 'r') for line i