`

文件操作3

    博客分类:
  • Java
阅读更多

1.文件缓冲输入输出流

          BufferedInputStream BufferedOutputStream

          方法:int  available();返回当前缓冲区的字节数

 

                  close();关闭流

 

                  read();读取一个字节read(byte[ ] b);读取一个数组 read(byte[ ] b,int start,int length);读取数组b

                  中start开始长度为length的字节.

 

                  构造方法可以传一个InputStream 或InputStream和一个int 大小的内部缓冲区数组

                 

                   BufferedOutputStream中提供flush()方法,刷新缓冲区的输出流,因为写入速度没有读取那么

                   快,flush方法可避免数据丢失

 

 

package 缓冲流;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 
 * @author hb
 *
 */
public class FileIo {

	/**
	 * 输入流 InputStream   字节
	 * 输出流 OutputStream  字节
	 */
	
	public static void main(String[] args) {
		String Path = "D:\\360Downloads\\Software\\一键GHOST_2013.exe";
		String Path1 = "d:\\2.txt";
		File f= new File(Path);
		File f1= new File(Path1);		
		
		long t1=System.currentTimeMillis();	//测试复制时间	
		
		byte b[]=reader(f);
		writter(f1,b);
		
		long t2=System.currentTimeMillis();
		System.out.println(t2-t1);
	}
	
	public static byte[] reader(File f){
		try {
			FileInputStream fis = new FileInputStream(f);
			BufferedInputStream bis = new BufferedInputStream(fis,100);//默认为8192
			int len = bis.available();
			byte [] bs=new byte[len];
			
			
			bis.read(bs);
			
			
			fis.close();
			return bs;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
		
	}
	
	public static void writter(File f,byte bs[]){
		
		try {
			FileOutputStream fos = new FileOutputStream(f);
			BufferedOutputStream bos = new BufferedOutputStream(fos,100);
			fos.write(bs);
			bos.flush();
			fos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
				
	}
	
}

 

 

 

   一个方法中实现复制

package 缓冲流;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * 缓冲流的复制
 * @author hb
 *
 */
public class CopyOnBuffered {
	public static void main(String[] args) {
		String Path = "D:\\360Downloads\\Software\\一键GHOST_2013.exe";
		String Path1 = "e:\\2.txt";
		File f= new File(Path);
		File f1= new File(Path1);
		long t1=System.currentTimeMillis();
		
		try {
			FileInputStream fis = new FileInputStream(f);	
			FileOutputStream fos = new FileOutputStream(f1);
			BufferedInputStream bis = new BufferedInputStream(fis);
			BufferedOutputStream bos = new BufferedOutputStream(fos);
			
			
			
			//**********读一个字节写一个字节。运行效率很低
			
//			int t = bis.read();
//			int len = bis.available();
//			while(len>0){
//				bos.write(t);
//				t= bis.read();
//				len=bis.available();
//			}
			
			int t=bis.read();//**********读到缓冲区再写到缓冲区,再写到流,和一个一个字节读有差别。
			while(t!=-1){
				bos.write(t);
				t=bis.read();
			}
		
			bos.flush();
			fos.close();
			fis.close();
		
			} catch (IOException e) {
				e.printStackTrace();
			}

		
			long t2=System.currentTimeMillis();
			System.out.println(t2-t1);
		}
}

 

2.文件输入输出字符流

          InputStreamReader OutputStreamWriter

 

         方法:read();都很类似,读取一个字符并返回int,没有了返回-1;

 

               ready()返回Boolean判断是否已经准备好了读取

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
 * 复制String文件
 * @author hb
 *
 */
public class Copy {
	public static void main(String[] args) {
		File f=new File("D:\\新建文本文档.txt");
		File f1=new File("d:\\c2.txt");
		long t1=System.currentTimeMillis();
		CopyStr(f,f1);
		long t2=System.currentTimeMillis();
		System.out.println(t2-t1);
	}		
	/**复制方法
	 * 
	 * @param f 源文件
	 * @param f1 目标文件
	 */
	public static void CopyStr(File f,File f1){
		try {
			FileInputStream fis =new FileInputStream(f);		
			FileOutputStream fos =new FileOutputStream(f1);
			InputStreamReader isr =new InputStreamReader(fis);//字符流
			OutputStreamWriter osr =new OutputStreamWriter(fos);//字符流
			
			int t = isr.read();//没有了会返回一个-1
			
			while(t!=-1){
				osr.write(t);//读了就写单个字符
				t=isr.read();
				
			}
			osr.flush();
			fos.close();
			fis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

 

 

3.基本数据类型的输入输出流

          DataInputStream DataOutputStream

 

          读的顺序和写的顺序必须相同.

 

          方法:writerBoolean(Boolean v);writeByte(int v);writeBytes(String s);writeChar(int v);

                  writeChars(String s);witerInt(int v);……

 

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

public class 基本数据类型的输出 {

	public static void main(String[] args) {
		File f=new File("e:\\aaa.txt");
		writeF(f);
		readF(f);
	}
	public static void writeF(File f){
		
			try {
				FileOutputStream fos =new FileOutputStream(f);
				DataOutputStream dos = new DataOutputStream(fos);
				
				dos.write(1);//1个字节
				dos.writeInt(100);//4个字节
				dos.writeBoolean(true);//1个字节
				dos.writeChar('a');//2个字节
				dos.writeFloat(10.0f);//4个字节
				dos.writeChars("中");//4个字节  每个char都是2个字节
				dos.writeBytes("ssss");//4个字节
				dos.flush();
				dos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		
	}
	
	public static void readF(File f){
		try {
			FileInputStream fis =new FileInputStream(f);
			DataInputStream dis = new DataInputStream(fis);
			byte i=dis.readByte();//1个字节
			int j=dis.readInt();//4个字节
			boolean s=dis.readBoolean();//1个字节
			char c=dis.readChar();//2个字节
			float fa= dis.readFloat();
			String s1=dis.readLine();//该方法读字符串只能读英文字符。
			System.out.println(i+" "+j+" "+" "+fa+" "+s+" "+c+" "+s1);
			dis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


//输出结果:1 100  10.0 true a N-ssss

 

 

问题:中文无法正常显示

 

 

解决方法

 

dos.writeUTF(stu.name);

 

stu.name=dis.readUTF();

 

示例程序

Student.java

package v120140526;

import java.io.File;

public class Student {

	char sex;
	byte age;
	String name;
	int num;
	
	public static void main(String[] args) {
		Student stu=new Student();
		File f=new File("D:\\save.txt");
		stu.sex='b';
		stu.age=18;
		stu.num=20124585;
		stu.name="黄斌";
		
		Save.writeF(f, stu);
		Save.readF(f, stu);
	}
}

 

Save.java

package v120140526;

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

public class Save {

	public static void writeF(File f,Student stu){
		
		try {
			FileOutputStream fos =new FileOutputStream(f);
			DataOutputStream dos = new DataOutputStream(fos);
			
			dos.write(stu.age);
			dos.writeInt(stu.num);
			dos.writeChar(stu.sex);
			dos.writeUTF(stu.name);
			
			dos.flush();
			dos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	
}

public static void readF(File f,Student stu){
	try {
		FileInputStream fis =new FileInputStream(f);
		DataInputStream dis = new DataInputStream(fis);
		stu.age=dis.readByte();//1个字节
		stu.num=dis.readInt();//4个字节
		stu.sex=dis.readChar();//2个字节
		stu.name=dis.readUTF();
		System.out.println("年龄"+stu.age+" 学号"+stu.num+" 性别"+stu.sex+" 姓名"+stu.name);
		dis.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}
}

 运行结果:

年龄18 学号20124585 性别b 姓名黄斌

分享到:
评论
1 楼 迷失1118 2014-05-27  
呀!让我惊喜了

相关推荐

    模拟实现采用二级目录结构的磁盘文件系统中的文件操作

    3. **读写文件操作**: - **读文件**:根据读指针从文件中读取数据,并更新读指针位置。 - **写文件**:将数据写入文件,并更新写指针位置。 4. **关闭文件操作**: - **步骤**: 1. 写回缓冲区中的未提交数据...

    操作系统实验4_文件系统

    操作系统实验四的核心目标是设计和实现一个简单的...通过这样的实验,学生能够深入理解文件系统如何管理磁盘空间,跟踪文件元数据,以及如何执行基本的文件操作,这对理解和设计更复杂的操作系统有着至关重要的作用。

    一个简单的文件系统(操作系统课程设计)

    一个简单的文件系统(操作系统课程设计)主要任务是对用户文件和系统文件进行管理,以方便用户使用,并保证文件的安全性。文件管理具有对文件存储空间的管理、目录管理、文件的读/写管理以及文件的共享与保护功能。...

    操作系统课程设计--模拟文件管理系统

    在这个系统中,学生将学习如何构建一个能够处理多用户环境、权限控制、文件操作以及用户友好的界面的系统。下面将详细介绍这个项目涉及的关键知识点。 1. **多用户支持**: - 在操作系统中,多用户环境意味着多个...

    操作系统课程设计 linux文件系统

    linux版本和vc++6.0版本 含设计报告,流程图等。 设计一个简单的多用户文件系统。即 ①在系统中用一个文件来模拟一个磁盘;...基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。

    pb操作TXT文件(打开,写入,关闭,删除等等)

    - **错误处理**:在进行文件操作时,应添加适当的错误处理代码,如`Try...Catch`结构,以应对可能出现的异常情况,如文件不存在、权限问题等。 - **定位**:可以使用`Seek`方法改变读写位置,`Tell`方法获取当前...

    CANoe /CAPL 文件操作脚本

    CANoe/CAPL 文件操作脚本是用于自动化处理CANoe环境中的配置、数据记录和分析的编程工具。CANoe是一款广泛应用于汽车电子系统的诊断、测试和测量的软件,而CAPL(CANoe Application Programming Language)是CANoe内...

    操作系统课程设计——Linux二级文件系统设计

    使用文件来模拟外存,进行数据结构设计和操作算法的设计,实现一个文件系统并实现基本的文件操作(为了简便文件系统,不考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容)。要求: 1、对程序的每一部分...

    操作系统文件管理C++代码实现

    利用磁盘文件实现操作系统的文件管理功能,主要包括目录结构的管理、外存空 间的分配与释放以及空闲空间管理三部分。 内容: 1.能够在磁盘文件基础上模拟外存分配与回收流程; 2.支持 dir、 md、 cd、 rd命令。 ...

    C# 文件浏览操作控件

    3. **跨卷操作**:在不同磁盘分区或卷之间进行文件操作增加了复杂性,因为每个卷可能有不同的属性和权限。这个控件需要处理这些差异,确保在不同卷间操作文件时的正确性和一致性。 4. **文件类型和图标显示**:根据...

    操作系统课程设计_模拟文件系统

    在这个项目中,学生们被要求构建一个模拟的文件系统,该系统具备基本的文件操作功能,如读取、写入、创建和删除文件。这个设计不仅锻炼了学生的编程能力,也提升了他们对操作系统内核中文件系统机制的理解。 文件...

    c++读取Rinex几种文件(o文件,n文件,sp3文件)

    总的来说,C++读取RINEX文件涉及到了文件操作、数据解析、格式理解等多个方面,对于提升C++编程能力以及对GPS数据的理解都大有裨益。熟悉这些操作,不仅能够加深对RINEX标准的理解,还能为处理其他类似格式的科学...

    操作系统之文件系统设计一个n 个用户的文件系统,每次用户可保存m 个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施。至少要有create,delete,open,close,read,write等命令

    为了确保数据安全,文件系统需要具备基本的文件操作功能,如创建(create)、删除(delete)、打开(open)、关闭(close)、读取(read)和写入(write)。以下是这些功能的详细介绍以及系统设计的一些关键点: 1....

    操作系统课程大作业-文件管理系统

    总的来说,这个大作业旨在通过实际编程,让学生掌握文件管理系统的基本概念、设计原则以及C++中进行文件操作的技巧,提升对操作系统核心功能的理解和应用能力。完成这样的项目不仅能够提升编程技能,也有助于理论...

    杭电 操作系统课程设计 简单文件系统的实现

    杭电 操作系统课程设计 简单文件系统的实现 杭电 操作系统课程设计 简单文件系统的实现 杭电 操作系统课程设计 简单文件系统的实现

    java操作mongodb存储文件实例

    将一系列图片文件存储到MongoDB中 java操作mongodb存储文件

    实现简单的文件系统

    通过对具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 要求: 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件...

    C++使用com接口对Excel 文件进行常用操作

    此外,还可以打开选择的 Excel 文件、设置当前工作表、读取各个单元格的数据、获得 sheet 表的数量、获得 sheet 表的名字、释放资源和关闭 Excel 等操作。 COM 接口是 Microsoft 的一项技术,允许不同的应用程序...

    QT中QFileDialog文件读写另存为操作

    5. **错误处理**:在进行文件操作时,务必检查可能的错误,如文件是否成功打开、关闭,读写过程中是否有问题等。通常使用`QFile::errorString()`来获取错误信息,或者检查`QFile::error()`的返回值。 通过以上步骤...

    VC之PDF文件操作

    在VC++环境中进行PDF文件操作是一项常见的任务,尤其在开发桌面应用程序时,可能需要读取、编辑或生成PDF文档。本篇文章将详细讲解如何在VC++中实现这些功能,主要涉及的技术点包括PDF文件的基本概念、PDF库的使用...

Global site tag (gtag.js) - Google Analytics