实训项目九:文件与数据流
文件和数据流

文件和路径名的信息、管理方面的类如: – File:提供用于创建、复制、删除、移动和打开 文件的静态方法 – FileInfo:提供创建、复制、删除、移动和打 开文件的实例方法 – Directory:提供用于创建、移动和枚举目录和 子目录的静态方法。 – DirectoryInfo:提供用于创建、移动和枚举目 录和子目录的实例方法
注:利用这些类可以操作文件或路径。
文件内容(数据)操作方面的类,如:
Stream(二进制字节格式,为基类) FileStream(二进制字节格式并可以随机操作) BinaryWriter/BinaryReader(二进制字节格式) StreamReader/StreamWriter(字符格式)等。
文件拷贝、删除、移动示例 .doc P14
3、FileInfo类编程
功能: 获得文件信息的FileInfo类编程(当然也可以利 用File类来达到)。
目的: 在获得文件的数据之前,可能需要获得文件的属 性,可以通过FileInfo类来达到。
编程要点: 它与File的差别在于:其方法不是静态方法,需 要实例化其对象来操作
"+stAccessTime); Console.WriteLine("最后一次写时间:
"+stWriteTime ); Console.ReadLine();
练习1:
设计一个能够读写磁盘文件的程序。
练习2:
设计一个能够获得某一文件夹下的各个文件的 信息程序。
5、文件数据(流)的基本知识
1〉建立新文件夹
Directory.CreateDirectory(path) 2〉删除文件夹
Directory.Delete(path) 3〉判断文件夹是否存在
第6章 文件与数据流

2、字节流 ——基类:例子
把输入流中的所有内容复制到输出流中
public void copy(InputStream in, OutputStream out) throws IOException { byte[] buf = new byte[4096]; int len = in.read(buf); while (len != -1) { out.write(buf, 0, len); len = in.read(buf); } }
File f1 = new File(“file1.txt”); File f2 = new File(“file2.txt”); FileInputStream in=new FileInputStream(f1); FileOutputStream out=new FileOutputStream(f2); FileOutputStream out=new FileOutputStream(“file3.txt”); 输入流的参数是用于指定输入的文件名,输出流的参数则 是用于指定输出的文件名。
2、字节流
例2: 把一个文件的内容加到另一个文件后
import java.io.*; class Filestream { public static void cat(String fsrc, String fdest) { try { InputStream in = new FileInputStream(fsrc); OutputStream out = new FileOutputStream(fdest, true); int c; while((c=in.read())!=-1) out.write(c); public static void main(String args[]) out.close(); { in.close(); cat("file2.txt", "file1.txt"); } } catch (IOException ex) { System.err.println(ex); } }
文件与数据流

第8章文件与数据流一、文件和流的概念文件是指在各种驱动器上(硬盘、可移动磁盘等)永久或临时存储的数据的有序集合,是进行数据读/写操作的基本对象。
文件通常具有文件名、路径、访问权限等属性。
流从概念上来说类似于单独的磁盘文件,它也是进行读/写操作的对象。
流提供了连续的字节存储空间,通过流可以向后备的存储器写入数据,也可以从后备存储器读取数据。
与磁盘文件直接相关的流称为“文件流”。
除此之外,还有网络流、内存流等其他类型的流。
流用于传输数据时,有两个传输方向:读:将数据从外部数据源传输到程序中,这是读取流。
写:将数据从程序传输到外部数据源,这是写入流。
二、相关知识1.流的创建FileStream fs = new FileStream( "test1.dat",FileMode.Create, FileAccess.Write);一般格式:FileStream fs = new FileStream( string path,FileMode mode, FileAccess access);参数含义:path:指定当前FileStream对象将封装的文件的相对路径或绝对路径。
可以只是文件名(在程序所在目录下创建或打开文件)mode:指定如何打开或创建文件,它的值必须是FileMode枚举中的值。
access:指定如何访问文件,它的值必须是FileAccess枚举中的值。
2)将数据写入流fs.write(byte[] array,int offset,int count);参数含义:array:要写入文件流的字节数组offset:array数组中开始写入文件流的字节的下标。
count:将要写入流的最大字节数3)从流中读取数据fs.ReadByte()从流中读取一个字节(返回已转换为int的字节),并将流内的位置向前推进一个。
如果已经到达流的末尾,则返回-1。
在读之前,用canRead属性确定当前对象是否支持读取操作。
文件和数据流课件

文件写入的常见方式
使用内置的`open()`函数
使用`write()`方法
除了可以打开文件外, `open()`函数还支持写入模式 ,我们可以使用这个模式来写 入文件。
write()方法用于将文本写入文件中。
使用`writelines()…
writelines()方法一次写入多行文本到文
件中。
使用`seek()`方法改变文 …
使用文件对象的write()方法还可 以将数据追加到文件末尾。追加 数据时,需要以追加模式打开文 件(使用'a'作为打开模式)。
数据流的常见问题及解决方案
数据流丢失
在读取或写入数据流时,可能会 遇到数据流丢失的问题。为了避 免数据流丢失,可以使用备份文
件或进行数据备份。
数据流冲突
多个程序同时访问同一个文件时, 可能会产生数据流冲突。为了避免 数据流冲突,可以使用锁机制来控 制对文件的访问。
写入权限
允许用户修改文件的内容。
执行权限
允许用户执行文件,如可执行 程序等。
访问权限的设定
可以通过文件属性或操作系统 权限设置来限制用户对文件的
访问权限。
02
文件读取和写入
文件读取的基本方法
使用内置的`open()`函数
使用`read()`方法
使用`readline()`方法
使用`readlines()`…
数据流分词实例
总结词
将数据流分割成独立的词汇或词组,以便进行后续的数据处理和分析。
详细描述
数据流分词是一种常见的预处理技术,用于将数据流中的连续字符或符号分割成独立的词汇或词组。分词算法通 常基于规则、词典和统计方法来实现。通过对数据流进行分词,可以方便地对数据进行后续的处理和分析,如情 感分析、主题建模等。
java 文件与数据流报告

文件与数据流实习报告一文件的性质:(1用来长期保存大量的数据在程序结束后长期(永久)存在,件一般位于外存储设备上(硬盘、光盘、磁带)比较:内存中的变量或数组中的数据是临时性数据,程序结束时就会丢失。
(2)位流:计算机中的数据是以0与1的方式存储在两个装置间存取数据, 以1或0的方式进行,ava将数据在目的地与来源之间的流动抽象化为一个流,即位流。
(3)数据流:数据流是一系列的数据,循环处理每个数据单元,直到遇到结束符或出现异常(Exception)。
二输入输出流:Java中输入输出流主要分为字节流和字符流。
所有字节流都继承java.io.InputStream ,和java.ioOutputStream它们两个都是抽象类。
(1)输入字节流:a 所有字节流都继承java.io.InputStream .b 类InputStream的成员方法read( )读入单个无符号字节(unsigned byte)的数据,并返回一个整数类型(int)的值(与读入的无符号字节数据相对应)正常返回: 介于0和255之间的一个数如果遇到数据流结束,则返回-1c public int read(byte[ ] data) throws IOException 和public int read(byte[ ] data, intoffset, int length) throws IOException的用法。
read(byte[ ] data) t从输入流中读取一定数量的字节,并将其存储在缓冲区数组data 中。
以整数形式返回实际读取的字节数。
在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。
如果data 的长度为0,则不读取任何字节并返回0;否则,尝试读取至少一个字节。
如果因为流位于文件末尾而没有可用的字节,则返回值-1;否则,至少读取一个字节并将其存储在data 中。
read(byte[ ] data, int offset, int length)是将长度是从offset开始读length个字节。
第9章输入输出流和文件操作精品PPT课件

* parent指定目录名,目录名可以是字符串,也可以 是File对象。
9.4.1 文件类File
例如: * = new File("my"); //在当前目录中,以指定文件名创建一个文件对象 * = new File(".",""); //目录也是以文件形式保存的,称为目录文件,创建 一个目录文件对象,表示当前目录 * = new ,"my"); //在dir目录中,以指定文件名创建一个文件对象
文件或目录的路径名由“/“或者“\“分割; * = new File("C:",""); //表示C盘根目录 * = new File("C:/",""); * = new File("C:\\","");
9.4.1 文件类File
2. File类提供的方法
创建一个文件对象后,可以用File类提供的方法来 获得文件的属性信息。
9.1.1 操作系统中的文件和目录概念
1. 文件与文件系统 2. 目录结构与文件检索 3. 文件的逻辑结构
9.1.1 操作系统中的文件和目录概念
4. 文件的存取方法
5. 文件的使用
9.1.2 程序设计语言中的文件类型
1. 文件类型概念
2. 文件与数组的区别
9.1.3 流的概念
1. 流的定义和作用
9.2.3 Java的标准输入/输出
【例9.1】 标准输入/输出.
9.2.4 文件字节输入/输出流类
1. 类
2. 类
9.2.4 文件字节输入/输出流类
第八章数据流和文件

sw.Close();
8.1.4 案例思考
通过对备忘录功能的代码分析,我们发现在对日志文件进行读写 时,做法都是先构造实例,之后将StreamReader或 StreamWriter关联到这个流上。读者可以尝试修改代码,使之直 接用文件名作为参数构造StreamReader或StreamWriter实例, 并分析修改前后的区别。
fs = new ("Log.txt", , , );
对于,如果要求的模式与文件的现有状态不一致,就会抛出一个异常。 和枚举是按位标志,所以这些值可以与C#的按位OR运算符|合并使用。
流的关闭
使用完一个流后,就应关闭它,如案例中代码:
fs.Close();
关闭流会释放与它相关的资源,允许其他应用程序为同一个文件 设置流。在打开和关闭流之间,可以读写其中的数据,有许多方 法可以进行这样的读写。
、和枚举
构造实例的后三个参数值分别取、和枚举的枚举值。
枚举
值 Append、Create、CreateNew、Open、OpenOrCreate和Truncate Read、ReadWrite和Write Inheritable、None、Read、ReadWrite和Write
示例:构造实例方式
类
要构造实例,需要以下4条信息:
✓ 要访问的文件。 ✓ 表示如何打开文件的模式。例如,创建一个新文件或打开一个现
有的文件。如果打开一个现有的文件写入操作是覆盖文件原来的 内容,还是添加到文件的末尾? ✓ 表示访问文件的方式——是只读、只写,还是读写? ✓ 共享访问——表示是否独占访问文件。如果允许其他流同时访问 文件,则这些流是只读、只写还是读写文件?
第05章 文件与数据流-小结

第05章文件与数据流●java语言提供了很多类来处理目录、文件、文件数据,这些类主要位于包“java.io”中。
5.1 输入流与输出流●输入流:外部设备>> 内存InputStream及其子类●输出流:内存>> 外部设备OutputStream及其子类5.1.1 InputStream和FileInputStream●InputStream -处理输入流的类,抽象类例题:第132页例题要点:-control+Z :windows操作系统中流的结束标记public abstract int read() 方法:从输入流读入一个字节,若没有字节可读,则返回-1。
System.in:对应于标准输入,即键盘的输入。
是指向InputStream类型实例的应用。
InputStream类还有其他成员方法:public int available() 返回当前输入流中有效的字节数public int read(byte[] b) 一次读入多个字符,并存放在字节数组b中●FileInputStream -处理文件输入流的类,InputStream的子类对文件内容进行操作的基本步骤:1. 创建文件所对应的实例;public FileInputStream(String name) 构造方法2. 对文件进行读写操作;父类InputStream中继承3. 关闭文件:public void close()5.1.2 OutputStream和FileOutputStream●OutputStream -处理输出流的类,抽象类例题:第138页例题要点:public abstract int write(byte[] b) 方法:输出内容b。
System.out:对应于标准输出,即输出到屏幕。
是指向OutputStream类型实例的应用。
public void flush() 强制立即输出缓存中的数据●FileOutputStream -处理文件输出流的类,OutputStream的子类对文件内容进行操作的基本步骤:1. 创建文件所对应的实例;构造方法:public FileOutputStream(String name)public FileOutputStream(String name,boolean append)2. 对文件进行读写操作;父类InputStream中继承public void write(byte[] b)public void write(byte[] b, int off, int len)public void write(int b)3. 关闭文件:public void close()5.1.3 PrintStream●非常重要的输出流,System.out就是PrintStream的实例的一个引用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训项目九:文件与数据流一、实训目的1.理解数据流的概念;2.理解Java流的层次结构;3.理解文件的概念;二、实训要求1.掌握字节流的基本使用方法;2.掌握字符流的基本使用方法;3.能够创建、读写、更新文件;三、实训内容(一)使用标准数据流的应用程序标准数据流指在字符方式下(如DOS 提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。
1.程序功能:将键盘上输入的字符在屏幕上显示出来2.编写Stdio_1.java 程序文件,源代码如下。
public class Stdio_1{public static void main(String[] args) throws java.io.IOException {byte buffer[]=new byte[10];System.out.println("从键盘输入不超过10 个字符,按回车键结束输入:");int count =System.in.read(buffer);//读取输入的字符并存放在缓冲区buffer 中System.out.println("保存在缓冲区buffer 中元素的个数为:"+count);System.out.println("buffer 中各元素的值为:");for (int i=0;i<count;i++){System.out.print(" "+ buffer[i]);//在屏幕上显示buffer 元素的值}System.out.println();System.out.println("输出buffer 字符元素:");System.out.write(buffer, 0, buffer.length);}}3.编译、运行Stdio_1.java 文件。
(二)使用文件输入输出流的应用程序1. 程序功能:将保存在本地机当前文件夹中的File1.html 文本文件的内容在屏幕上显示出来,然后将其另存为File2.txt 文件。
2. 编写FileIO_2.java 程序文件,源代码如下import java.io.*;public class FileIO_2 {public static void main(String[] args) throws IOException {FileReader in=new FileReader("File1.html");//建立文件输入流BufferedReader bin=new BufferedReader(in);//建立缓冲输入流FileWriter out=new FileWriter(" File2.txt",true);//建立文件输出流String str;while ((str=bin.readLine())!=null) {//将缓冲区内容通过循环方式逐行赋值给字符串strSystem.out.println(str);//在屏幕上显示字符串strout.write(str+"\n");//将字符串str 通过输出流写入File2.txt 中}in.close();out.close();}}3. 编译、运行程序(三)使用随机文件类的应用程序使用文件输入类FileReader 只能将文件内容全部读入。
如果要选择读入文件的内容,可使用随机文件类RandomAccessFile。
1.程序功能:建立数据流,通过指针有选择的读入文件内容。
2.编写RandomFile.java 程序文件,源代码如下。
import java.io.*;public class RandomFile {public static void main(String args[]) {String str[]={"First line\n","Second line\n","Last line\n"};try {RandomAccessFile rf=new RandomAccessFile("File2.txt", "rw");System.out.println("\n 文件指针位置为:"+rf.getFilePointer());System.out.println("文件的长度为:"+rf.length());rf.seek(rf.length());System.out.println("文件指针现在的位置为:"+rf.getFilePointer());for (int i=0; i<3; i++)rf.writeChars(str[i]); // 字符串转为字节串添加到文件末尾rf.seek(10);System.out.println("\n 选择显示的文件内容:");String s;while ((s=rf.readLine())!=null)System.out.println(s);rf.close();}catch (FileNotFoundException fnoe) {}catch (IOException ioe) {}}}3.编译并运行程序(四)使用数据输入输出流与文件输入输出流类的应用程序使用数据输入流DataOutputStream 和数据输出流DataInputStream 可以读取或写入任何Java 类型的数据,不用关心它们的实际长度是多少字节。
一般与文件输入流FileInputStream 和输出流类FileOutputStream 一起使用。
1.程序功能:将整型数据和字符串对象通过数据输出流写到文件中。
将文件中的整型数据和字符串对象通过数据输出流读出,并在屏幕上显示文件中的内容。
2.编写DataIO.java 程序文件,源代码如下。
import java.io.*;public class DataIO{public static void main(String arg[]){try{ //添加方式创建文件输出流FileOutputStream fout = new FileOutputStream("File4.txt",true);DataOutputStream dout = new DataOutputStream(fout);dout.writeInt(1);dout.writeChars("罗马"+"\n");dout.writeInt(2);dout.writeChars("北京"+"\n");dout.close();}catch (IOException ioe){}System.out.println(“写文件内容完成!”);try{Thread.sleep(3000);}catch(Exception e){}try{FileInputStream fin = new FileInputStream("File4.txt");DataInputStream din = new DataInputStream(fin);int i = din.readInt();while (i!=-1) //输入流未结束时,输入流结束时i 为-1{System.out.print(i+" ");char ch ;while ((ch=din.readChar())!='\n') //字符串未结束时System.out.print(ch);System.out.println();i = din.readInt();}din.close();}catch (IOException ioe){}}}3.编译并运行程序(五)使用对象输入输出流的应用程序使用对象流可以直接写入或读取一个对象。
由于一个类的对象包含多种信息,为了保证从对象流中能够读取到正确的对象,因此要求所有写入对象流的对象都必须是序列化的对象。
一个类如果实现了Serializable 接口,那么这个类的对象就是序列化的对象。
Serializable 接口没有方法,实现该接口的类不需要实现额外的方法。
1.程序功能:保存对象信息到文件,并将文件中的对象信息显示出来。
2.编写Student.java 程序文件,源代码如下。
import java.io.*;public class Student implements Serializable {private String name=null;private String sex=null;private int age=0;public Student(){}public Student(String name,String sex,int age){=name;this.sex=sex;this.age=age;}public String getName() {return name;}public void setName(String name) { = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}void save(String fname)//保存到文件中的方法{try{FileOutputStream fout = new FileOutputStream(fname);//输出文件流ObjectOutputStream out = new ObjectOutputStream(fout);//输出对象流out.writeObject(this); //写入对象out.close();}catch (FileNotFoundException fe){}catch (IOException ioe){}}void display(String fname)//显示文件中对象信息的方法{try{FileInputStream fin = new FileInputStream(fname);//输入文件流ObjectInputStream in = new ObjectInputStream(fin);//输入对象流Student OO = (Student)in.readObject(); //读取对象System.out.println(" 类名:"+OO.getClass().getName()+""+OO.getClass().getInterfaces()[0]);System.out.println(" "+OO.getName()+" "+OO.getSex()+""+OO.getAge());in.close();}catch (FileNotFoundException fe){}catch (IOException ioe){}catch (ClassNotFoundException ioe) {}}public static void main(String[] args){String fname="Student.obj";Student stu=new Student("张三","男",19);stu.save(fname);stu.display(fname);//下面请自己编写代码查看该文件的内容,即以文本方式显示出文件内容}}(六)使用File对象的应用程序File对象能完成操作系统下的文件和目录的操作,实现了文件和目录的属性查看和目录文件的创建、读写、更新。