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 姓名黄斌
相关推荐
3. **读写文件操作**: - **读文件**:根据读指针从文件中读取数据,并更新读指针位置。 - **写文件**:将数据写入文件,并更新写指针位置。 4. **关闭文件操作**: - **步骤**: 1. 写回缓冲区中的未提交数据...
模拟实现采用二级目录结构的磁盘文件系统中的文件操作。 文件系统是操作系统中管理和存取信息的机构,它具有“按名存取”的功能,不仅方便用户,而且能提高系统效率且安全可靠。 在用户程序中可使用文件系统提供的...
操作系统实验四的核心目标是设计和实现一个简单的...通过这样的实验,学生能够深入理解文件系统如何管理磁盘空间,跟踪文件元数据,以及如何执行基本的文件操作,这对理解和设计更复杂的操作系统有着至关重要的作用。
通过用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 二、实验内容和要求 编程模拟一个简单的文件系统,实现文件系统的管理和...
在这个系统中,学生将学习如何构建一个能够处理多用户环境、权限控制、文件操作以及用户友好的界面的系统。下面将详细介绍这个项目涉及的关键知识点。 1. **多用户支持**: - 在操作系统中,多用户环境意味着多个...
- **错误处理**:在进行文件操作时,应添加适当的错误处理代码,如`Try...Catch`结构,以应对可能出现的异常情况,如文件不存在、权限问题等。 - **定位**:可以使用`Seek`方法改变读写位置,`Tell`方法获取当前...
操作系统实验,用C语言实现自己的文件系统。设有一个容量为2M字节的磁盘,磁盘中扇区(block)的大小为512字节,所有扇区可以视为构成一个线形存储空间,从0开始,顺序给每个扇区分配一个编号,视为物理扇区号,借助...
3. **跨卷操作**:在不同磁盘分区或卷之间进行文件操作增加了复杂性,因为每个卷可能有不同的属性和权限。这个控件需要处理这些差异,确保在不同卷间操作文件时的正确性和一致性。 4. **文件类型和图标显示**:根据...
在本教程中,我们将重点讨论如何通过JNI在Android应用中进行文件操作。 首先,要使用JNI,我们需要在Java类中声明native方法。例如,我们可以声明一个名为`readFileFromNative`的方法: ```java public class ...
在这个项目中,学生们被要求构建一个模拟的文件系统,该系统具备基本的文件操作功能,如读取、写入、创建和删除文件。这个设计不仅锻炼了学生的编程能力,也提升了他们对操作系统内核中文件系统机制的理解。 文件...
c语言文件读写操作代码c语言文件读写操作代码c语言文件读写操作代码c语言文件读写操作代码c语言文件读写操作代码c语言文件读写操作代码c语言文件读写操作代码c语言文件读写操作代码c语言文件读写操作代码c语言文件...
为了确保数据安全,文件系统需要具备基本的文件操作功能,如创建(create)、删除(delete)、打开(open)、关闭(close)、读取(read)和写入(write)。以下是这些功能的详细介绍以及系统设计的一些关键点: 1....
杭电 操作系统课程设计 简单文件系统的实现 杭电 操作系统课程设计 简单文件系统的实现 杭电 操作系统课程设计 简单文件系统的实现
将一系列图片文件存储到MongoDB中 java操作mongodb存储文件
总结来说,C++操作DBF文件涉及到理解DBF文件的内部结构,使用C++的I/O流进行文件操作,以及处理不同数据类型的转换。通过自定义的`Dbf`类,我们可以方便地读取、写入和查询DBF文件,而无需依赖Visual Foxpro驱动,...
以下将详细讲解如何通过MFC在VS2010中实现读写Excel文件的操作。 首先,我们需要了解基础的Excel文件格式。Excel文件通常以.xlsx或.xls为扩展名,它们是基于Open XML标准的。在MFC中,我们不会直接操作这些XML文件...
Delphi 操作Hosts文件Delphi 操作Hosts文件Delphi 操作Hosts文件Delphi 操作Hosts文件
通过对具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 要求: 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件...
此外,还可以打开选择的 Excel 文件、设置当前工作表、读取各个单元格的数据、获得 sheet 表的数量、获得 sheet 表的名字、释放资源和关闭 Excel 等操作。 COM 接口是 Microsoft 的一项技术,允许不同的应用程序...
华中科技大学操作系统课程设计专用,内含5个部分: 1.1 利用系统调用实现文件拷贝(含代码和makefile) 1.2 多进程编程,实现三个子...说明:本内容尝试实现更加底层的系统调用,而不是用C语言中的文件操作实现文件拷贝