`
Dewing
  • 浏览: 6192 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论
  • MNTMs: 这是饼,还不是球,java中自带有一个画圆的方法,是可以设置颜 ...
    线程游戏

文件的储存与读取

 
阅读更多

    数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。 

在电脑上的数据有三种存储方式,一种是外存,一种是内存,一种是缓存。比如电脑上的硬盘,磁盘,U盘等都是外存,在电脑上有内存条,缓存是在CPU里面的。外存的存储量最大,其次是内存,最后是缓存,但是外存的数据的读取最慢,其次是内存,缓存最快。

java中将输入输出象称为流,就好像水管,将两个容器连接起来。将数据冲外存中读取到内存中的称为输入流(Input Stream),将数据从内存写入外存中的称为输出流(Output Stream)显然,从上述描述可知,Input Stream不关心数据源来自何种设备;而Output Stream不关心数据的目的是何种设备

       流序列中的数据既可以是未经加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定数据。因此Java中的流分为两种:
 1)  字节流:数据流中最小的数据单元是字节
 2)  字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。

 

    在Java中,对于文件的储存于读写有与之对应的类, FileInputStream类是以文件作为数据输入源的数据流或者说是打开文件,从文件读数据到内存的类。该类可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节。在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色。FileOutputStream类用来处理以文件作为数据输出目的数据流或者说是从内存区读数据入文件。包装类DataOutputStreamDataInputStream为我们提供了多种对文件的写入和读取方法,writeBoolean(),writeUTF()writeCharwriteByte()writeDouble()等和对应的read方法,

这些方法极大的方便了我们的写入和读取操作。

    另外,我们需要注意的是:1)文件中写数据时,若文件已经存在,则覆盖存在的文件;(2)的读/写操作结束时,应调用close方法关闭流。

 

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileIO {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args){	
//		//创建文件
//		try {
//			file.createNewFile();
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//		
//		file = new File("F:/a/a/test"); //创建目录
////		file.mkdir(); //只能创建一个目录
//		file.mkdirs(); //创建多个目录
		
		//实例化对象
		FileIO f = new FileIO();		
		try {
			//读取文件
//			f.readFile("F:\\test.txt");
			//一次性读取
			f.readFile2("F:\\test.txt");
			//分段读取
//			f.readFile3("F:\\test.txt");
			
			//写入文件
//			f.writeFile("F:\\test.txt");
			//写入中文(带字符集)文件
//			f.writeFile2("F:\\test.txt","呵呵呵呵呵呵呵呵!");
			
			//复制文件
//			f.copyFile("F:\\test.txt", "F:\\test_copy.txt");
			
			//
//			f.writeFile3();
//			f.readFile4();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	public void printFile(String fileName){
		File file = new File(fileName);
		//列出子目录和文件
		File[] files = file.listFiles();
			
	}
	
	public void readFile(String filename) throws IOException{
		//创建文件输入流:读取
		try {
			FileInputStream fis = new FileInputStream(filename);
			/*byte存在负数:-128 ---> +127
			 * */
			//读取文件
			//读取一个字节
			int n = fis.read();
			
			while(n != -1){
				System.out.println((char)n);
				
				//读取下一个字节
				n = fis.read();
			}
			//用完要关闭输入流
			fis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//一次全部读取
	public void readFile2(String filename) throws IOException{
		//创建文件输入流:读取
		try {
			FileInputStream fis = new FileInputStream(filename);
			//输入流后面可读取的字节数
			int length = fis.available();		
			//一次全部读取
			byte[] bytes = new byte[length];
			
			//readNum真实读取的数量
			int readNum = fis.read(bytes);
			
			//还原成字符串
//			String content = new String(bytes);
			String content = new String(bytes,"GB2312");//指定字符集
			System.out.println(content);
			
			//用完要关闭输入流
			fis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//分段读取
	public void readFile3(String filename) throws IOException{
		//创建文件输入流:读取
		try {
			FileInputStream fis = new FileInputStream(filename);
			//建立一个字节队列
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			//首先按一个字节读取
			int n = fis.read();
			while(n != -1){
				//把字节存入队列
				bos.write(n);
				
				
				if(n == '\n'){
					//把队列中的数据读取出来
					byte[] bytes = bos.toByteArray();
					//还原字符串
					String str = new String(bytes,"GB2312");
					System.out.print(str);
					//清空队列
					bos.reset();
				}				
				//读取下一个字节
				n = fis.read();
			}			
			//用完要关闭输入流
			fis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//写入文件
	public void writeFile(String filename) throws IOException{
		try {
			//每次写入均从最开始位置写入,覆盖
//			FileOutputStream fos = new FileOutputStream(filename);
			//每次写入从最后位置写入,不覆盖
			FileOutputStream fos = new FileOutputStream(filename, true);
			
			//写数据
			//写入一个字节
			fos.write(1111);
//			fos.write("A");
			
			//关闭
			fos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//写入文件
	public void writeFile2(String filename, String content) throws IOException{
		try {
			FileOutputStream fos = new FileOutputStream(filename, true);
			//将字符串转化成byte
			byte[] bytes = content.getBytes("GB2312");			
			//写入数据
			fos.write(bytes);			
			//关闭
			fos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//复制文件
	public void copyFile(String fromFile, String toFile) throws IOException{
		try {
			//创建输出流
			FileInputStream fis = new FileInputStream(fromFile);
			//创建写入流
			FileOutputStream fos = new FileOutputStream(toFile, true);
			//读取一个字节
			int n = fis.read();
			while(n != -1){
//				n = n+1;//简单加密
//				n = n-1;//解密
				
				//写入数据
				fos.write(n);
				//读取下一个字节
				n = fis.read();
			}			
			//用完要关闭输入流
			fis.close();			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		
	}
	
	//对于int数据而言,按一个字节读取或写入会存在丢失
	public void readFile4() throws IOException{
		try {
			//如果文件不存在会自动创建
			FileInputStream fis = new FileInputStream("F:/save.dat");
			
			//创建数据输入流,对文件输入流进行封装
			DataInputStream dis = new DataInputStream(fis);			
			//向输入流写入一个int
			int score = dis.readInt();
			System.out.println(score);
			//关闭
			dis.close();
			fis.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public void writeFile3() throws IOException{
		try {
			//如果文件不存在会自动创建
			FileOutputStream fos = new FileOutputStream("F:/save.dat");
			
			//创建数据输出流,对文件输出流进行封装
			DataOutputStream dos = new DataOutputStream(fos);
			int score = 12345;
			int score1 = 12222;
			//向输出流写入一个int
			dos.writeInt(score);
			dos.writeInt(score1);
			//关闭
			dos.close();
			fos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}

 

 

 

 

<!--EndFragment--><!--EndFragment-->
分享到:
评论

相关推荐

    redius文件存储与读取文件源码

    在"redius文件存储与读取文件源码"这个主题中,我们将深入探讨如何利用Redis作为文件存储解决方案,并使用Java进行文件的读取和写入操作。 首先,Redis不直接支持大对象如文件的存储,但可以通过序列化和反序列化...

    labviewTDM文件存储与读取

    利用labview软件设计TDM文件存储与读取,主要是程序框图

    STL文件的读取显示.zip_STL c++_STL文件_STL读取_读取stl_读取stl文件

    以下是对STL文件读取和显示的详细知识讲解。 首先,了解STL文件的基本结构。STL文件分为两种类型:ASCII和二进制。ASCII格式的STL文件内容可读性较强,但文件大小较大;二进制格式则更紧凑,读写速度更快。每个STL...

    电子商务文件存储及读取服务的设计和开发思路

    在电子商务领域,文件存储与读取服务是至关重要的组成部分,它涉及到用户数据、交易记录、商品图片、订单信息等大量数据的管理。本设计和开发思路主要关注如何构建高效、安全且可扩展的文件存储系统,并实现快速的...

    一种Hadoop小文件存储和读取的方法.

    【Hadoop小文件存储与读取的挑战与解决方案】 在当前大数据时代,Hadoop Distributed File System(HDFS)因其高容错性、可扩展性和成本效益而被广泛应用于各种云计算场景。然而,HDFS最初的设计目标是处理大型文件...

    Java保存与读取文件.rar

    Java保存与读取文件代码示例,super("存储与读取对象"); //调用父类构造函数  Container container=getContentPane(); //得到容器  Icon imageIcon=new ImageIcon("image.gif"); //实例化一个图标  ...

    C#从文件中存储及读取结构体示例

    现在,我们可以创建一个`StructFile.cs`文件,包含上述的结构体定义和存储读取方法。然后在主程序中创建一个`StudentInfo`实例,调用这些方法进行操作: ```csharp StudentInfo student = new StudentInfo { Name =...

    Android 本地文件的存储和读取

    在Android应用开发中,理解和掌握本地文件的存储与读取是一项基本技能。本文将深入探讨Android如何进行文件操作,包括创建、读取、修改和删除本地文件,以便开发者能够高效地管理应用程序的数据。 首先,Android...

    stl文件读取_matlab读取stl文件形成点云_读取stl文件_读取stl_形貌_形貌扫描云图_

    8. **优化与效率**:对于大型STL文件,处理速度可能是个问题。可以使用数据分块、并行计算等方法提高读取和处理效率。 9. **误差处理**:在读取和处理STL文件时,可能会遇到格式错误、数据不完整等问题。良好的错误...

    JAVA实现远程文件读取

    * 将文件内容存储到StringBuffer中 * 返回文件内容 3. 异常处理 在RemoteFileClient和RemoteFileServer类中,我们使用try-catch块来处理可能出现的异常。异常处理的主要步骤包括: * 捕捉UnknownHostException和...

    delphi 文件读取范例 读取BIN文件(供参考)

    BIN文件通常用于存储程序的机器代码或数据,它们可以直接由计算机执行,或者作为其他软件安装过程的一部分。本教程将通过一个具体的范例,教你如何在Delphi中实现这一功能。 首先,我们需要了解Delphi中进行文件...

    bmp文件的存储与读取

    BMP(Bitmap)文件是一种常见...以上是关于“bmp文件的存储与读取”的主要知识点。在Visual C++环境下,通过理解和应用这些概念,你可以实现对BMP文件的读取、编辑和保存功能,为图形界面编程和图像处理提供基础支持。

    读写文件读取文件操作读取文件操作读取文件操作读取文件操作

    在IT领域,文件读写是基础且至关重要的操作,它涉及到程序与数据的交互,无论是存储用户输入,保存程序状态,还是处理数据,都离不开文件的读取和写入。以下将详细介绍关于“读取文件操作”的核心知识点,并结合可能...

    VS2010实现文件的读取及保存

    遥感技术涉及广泛的数据处理,包括图像分析、地理信息系统(GIS)等,而这些都需要对文件进行高效的读取和存储。 文件读取是指从磁盘或其他存储介质中获取文件内容并将其加载到内存中供程序处理。在VS2010中,可以...

    保存INI配置文件和读取配置文件

    INI 配置文件的保存和读取 INI 配置文件是一种常见的文件格式,用于存储程序的配置信息。它是一种简单的持久化机制,允许程序在启动时初始化配置信息。INI 文件由多个节(Section)组成,每个节中可以有多个键名...

    segy文件的读取、处理和存储

    本文将深入探讨如何正确地读取、处理和存储SEGY文件,以及涉及的关键知识点。 1. **SEGY文件结构**:SEGY文件由两部分组成——文本部分和二进制部分。文本部分包含了可读的头信息,如文件头和道头,而二进制部分则...

    易语言PAK文件读取

    易语言PAK文件读取是编程领域中一个特定的话题,主要涉及如何在易语言环境下处理PAK这种常见的压缩文件格式。PAK文件通常用于游戏、软件等项目中,用来集中存储资源,如图像、音频、文本等,以减少磁盘空间占用并...

    详解Java无需解压直接读取Zip文件和文件内容

    "Java读取Zip文件和文件内容" Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面...

    GPS RINEX o文件、n文件和sp3文件c++读取代码

    - 文件打开与关闭:程序会使用C++的文件流(fstream)库来打开和关闭RINEX文件。 - 文件头解析:读取并解析文件头信息,如观测文件类型、版本号、时间范围等。 - 数据解析:逐行读取文件,识别观测数据或导航数据的...

Global site tag (gtag.js) - Google Analytics