第一篇:Java_11_文件与流的应用(二)
第十一章 文件与流的应用(二)
一、大纲
1.理解java中字符流的概念和特性
2.掌握FileReader()和FileWriter()的使用
3.掌握BufferedReader()和BufferedWriter()的使用
4.掌握PrintWriter()的使用
二、实验目标:
1.掌握对文本文件的读写
2.掌握读写二进制文件
3.掌握File类的使用
三、实验方式:
要求学生自己独立完成四、上机指导任务
4.1任务1:打印文档(时间:20分钟)
4.1.1 任务描述
(1)使用FileReader类,读取一个txt文档,并文档内容打印输出。
4.1.2 任务目的(1)练习FileReader的使用。
(1)正确处理相关异常
4.1.4 难点提示
(1)读取的文档字符,需要转换为字符型。
4.2任务2:复制文档(时间:20分钟)
4.2.1 任务描述
(1)使用FileWriter类将一个txt文档复制到d:盘根目录下。
4.2.2 任务目的(1)练习FileWriter的使用。
4.2.3 任务要求
(1)正确处理相关异常。
4.2.4 难点提示
(1)用FileReader读,用FileWriter写。
4.3任务3:带缓存读写(时间:20分钟)
4.3.1 任务描述
(1)使用BufferedReader,BufferedWriter重做任务1和任务2。
4.3.2 任务目的(1)练习BufferedReader, BufferedWriter的使用。
(2)体会带缓冲和不带缓存的区别。
无
4.3.4 难点提示
无
4.4任务4:查阅API(时间:20分钟)
4.4.1 任务描述
(1)查阅API中类FileReader,FileWriter,BufferedReader,BufferedWriter常用方法,在任务1,2,3程序中注释总结。
4.4.2 任务目的(1)练习查阅API,深入理解几个流类。
4.4.3 任务要求
(1)总结几个类的用法及区别。
4.4.4 难点提示
无
五、课后作业
5.1 作业1 存储电话本(时间:20分钟)
5.1.1 作业任务
(1)让用户循环输入好友的姓名及电话,将其存入record.txt文件中。
无
5.1.3 难点提示
(1)可将用户循环输入的好友姓名及电话保存在一个二维数组当中,最后保存到文本文件中。
5.2 作业2 文件读写(时间:20分钟)
5.2.1 作业任务
(1)在计算机C盘根目录下,建立一个test.txt文件,用FileWriter类和BufferedWriter类在该文件中写一些文本。
(2)编写一个Main类,在该类的main方法中,采用FileReader类和BufferedReader类配合,将该test.txt文件中的文本读出并显示到控制台上。
(3)修改Main类的main方法中,原有读取文本文档的基础上,添加写文件的功能,即每读取一行文本,在打印到控制台的同时,将其写到test2.txt中。在写文件时,使用FileWriter 和BufferedWriter 完成。
5.2.2 任务要求
无
5.2.3 难点提示
(1)循环读写,直到文件末尾。
5.3 作业3 标记流(时间:20分钟)
5.3.1 作业任务
(1)完成课本P154页例子程序,结合API理解BufferedReader的mark(),reset()方法。
(1)理解mark(),reset()两个方法的作用。
5.3.3 难点提示
无
5.4 作业4 字符替换(时间:20分钟)
5.4.1 作业任务
(1)使用字符串“当dream和现实面对时,总是很painful的。”仿照作业3,编写程序,将字符串中的英文单词替换成“(此处省略n个字符)”,n为当前位置英文字符数。
5.4.2 任务要求
(1)使用CharArrayReader读取字符串;
(2)按要求输出替换后的字符串。
5.4.3 难点提示
(1)每次读取一个字符,判断是英文字符,设一个标记变量记录英文开始,同时设置计数变量,之后每个英文字符计数加1,直到非英文字符,清除标记变量,并输出要替换的内容。
5.5 作业5 字节流转字符流(时间:20分钟)
5.5.1 作业任务
(1)完成课本P156页例子程序,结合API理解类InputStreamReader,OutputStreamWriter。
5.5.2 任务要求
(1)理解InputStreamReader,OutputStreamWriter两个类的作用和应用场合。
5.5.3 难点提示
无
第二篇:Java_10_文件与流的应用(一)
第十章 文件与流的应用
(一)一、大纲
1.掌握Java中File类的使用
2.理解Java中流的概念与分类
3.掌握Java中字节流的使用
4.理解Java中的序列化
二、实验目标:
1.掌握对文本文件的读写
2.掌握读写二进制文件
3.掌握File类的使用
三、实验方式:
要求学生自己独立完成四、上机指导任务
4.1任务1:获取文件的属性(时间:20分钟)
4.1.1 任务描述
(1)在C盘根目录下,新建一个doc文件,在该文件中写入一些文本。
(2)定义Main类,在其main方法中获取该文件的以下属性:名称、路径:、绝对路径、最后修改时间、文件大小、所在文件夹
(3)查阅API,理解完成以上操作的方法,注释并总结。
4.1.2 任务目的(1)掌握File类的基本方法。
4.1.3 任务要求
无
4.1.4 难点提示
(1)
(2)
(3)
(4)
(5)
(6)获取名称用 getName()方法 获取路径用getPath()方法 获取绝对路径用getAbsolutePath()方法 获取最后修改时间用 file.lastModified()方法获取文件大小用 file.length()方法 获取所在文件夹用getParent()方法
4.2任务2:文件拷贝(时间:20分钟)
4.2.1 任务描述
(1)编写程序拷贝本练习文档,到D盘根目录下。
4.2.2 任务目的(1)掌握读写二进制文件的方法。
4.2.3 任务要求
(1)对必要的异常进行处理
4.2.4 难点提示
(1)使用FileInputStream和FileOutputStream配合进行操作。
4.3任务3:保存信息到文本文件(时间:20分钟)
4.3.1 任务描述
(1)定义Student类,有姓名,年龄,身高,体重,住址几个属性。由用户通过控制台输入各项属性值(可以循环输入多次),构建对象,将对象信息通过DataOutputStream将其写入到students.txt文件中。
(2)写入各属性值时,应使用对应的write方法,如writeDouble()、writeInt()、writeUTF()等,(需查阅API,自学DataOutputStream类)。
4.3.2 任务目的(1)学习DataOutputStream。
4.3.3 任务要求
无
4.3.4 难点提示
无
4.4任务4:读取文本文档的信息(时间:20分钟)
4.4.1 任务描述
(1)基于任务3,从students.txt中读取各项属性值,构建一个Student对象,打印对象的信息。
4.4.2 任务目的(1)练习DataInputStream类的使用。
4.4.3 任务要求
无
4.4.4 难点提示
无
五、课后作业
5.1 作业1 学习使用流操作数组(时间:20分钟)
5.1.1 作业任务
(1)完成课本P140页实践操作,学习使用ByteArrayInputStream,查阅API相关方法,注释总结。
5.1.2 任务要求
无
5.1.3 难点提示
无
5.2 作业2 序列化和反序列化[扩展](时间:20分钟)
5.2.1 作业任务
(1)利用ObjectInputStream,ObjectOutputStream和Serializable,重做任务3和任务4,查阅API相关方法,注释总结。
5.2.2 任务要求
无
5.2.3 难点提示
无
5.3 作业3 字节流与字符流的转换[扩展](时间:20分钟)
5.3.1 作业任务
(1)在d盘下新建一个test10.txt文件,依次写入0-100个数字字符(记事本打开不是乱码),再在25后插入英文字符“Hello world!”,然后读取文件并打印。
5.3.2 任务要求
(1)使用BufferedInputStream和BufferedOutputStream,查阅API相关方法,注释总结。
5.3.3 难点提示
无
5.4 作业4 文件夹的遍历(时间:20分钟)
5.5.1 作业任务
(1)遍历你计算机上某个硬盘下的某个文件夹。要求,该文件夹下所有文件都显示到控制台上,如果该文件夹下有子文件夹,则把子文件夹下的所有文件也显示出来,以此类推。
5.5.2 任务要求
无
5.5.3 难点提示
(1)可以采用递归的思想。编写一个方法,该方法接收一个File类型的参数,该方法可以列出某文件夹下所有文件及子文件夹,然后以每个子文件夹为参数再次调用该方法。
第三篇:java 文件与输入输出流
实验2文件与输入输出流(1)
一、实验目的 能够使用File类表示文件或目录,获取相关信息,并进行文件操作; 能够利用InputStream和OutputStream的子类进行字节读、写操作,明白其优点及不足;
能够用FileInputStream和FileOutputStream进行文件读写的操作; 理解“逐层包装”思想,能够利用“数据流”(DataInputStream和DataOutputStream)包装字节流,方便各类数据的读写;
能够利用“缓冲字节流”(BufferedInputStream和BufferedOutputStream)包装字节流,加快数据的读写速度;
熟知System.in和System.out是PrintStream的实例。
二、实验步骤
在Eclipse环境中导入项目“code(lab_2)”,然后按要求完成各小题:
1.打开FileTest.java文件,请按下列要求进行操作:
(1)按要求填充程序所缺代码;
(2)程序的运行需要用到一个命令行参数,请分别用一个文件、目录作参数来运行程序,看一看结果有什么不同。
(在Eclipse中设置命令行参数方法:Run/Open Run Dialog „/(x)=Arguments设置)
2.在上一题的基础上,修改程序,使之具备输出指定目录下所有子目录中文件绝对路径名、大小的功能,如下所示:
子目录:C:jdk1.6.0sample
子目录:C:jdk1.6.0samplewebservices
子目录:C:jdk1.6.0samplewebservicesEbayServer
文件: C:jdk1.6.0samplewebservicesEbayServerbuild.properties,大小: 512 字节 文件: C:jdk1.6.0samplewebservicesEbayServerbuild.xml,大小: 3168 字节1
……
提示:参考课件 FileSpace.java内容,通过一个以“路径名”为参数的静态方法来实现:该方法先判断“路径名”是一个文件,还是一个目录?如果是文件,则输出其绝对路径和大小;若为一个目录,则先显示目录绝对路径,再列出该目录下的所有子目录和文件,通过循环和递归方法来执行后续处理。
3.文件FileOutputStreamTest.java的功能是:利用FileOutputStream类向myfile.txt文件写入'0'~'9'和“用字节流写入文件内容”,请填充程序所缺代码,并运行程序。然后打开myfile.txt文件,查看其内容是否与要求相符?
4.文件FileInputStreamTest1.java的功能是:利用FileInputStream类以“逐字节”方式读取myfile.txt文件内容,并输出。请填充程序所缺代码,并运行程序。问题:为什么程序输出的内容为乱码?
5.在FileInputStreamTest1.java的基础上,编写程序FileInputStreamTest2.java,利用FileInputStream类以“字节数组”方式读取myfile.txt文件内容,能正确输出,解决乱码问题。
思考题:乱码问题是怎样解决的?
6.若要将信息“Java开发典型模块大全”(书名)、“明日科技”(作者)、79.5(价格)等信息以UTF、double类型保存到文件books.txt中,请用“数据流”类编程实现。
第四篇:课题4:流和文件
实习课题21:流和文件
实训目的 会使用java.io包中的常用类进行操作
实训内容
练习一: 在C:下创建一个名为Letter的目录。
编写一个程序来显示下列选项:
1:编写请假条
2:查看请假条
根据用户的选择执行以下操作。
如果所选的选项是“撰写请假条”,则应显示下列选项。
病假
事假
根据用户的选择,在练习1中所创建的Letter目录下创建一个名为Letter.txt的文件,其内容如下:
寄信人地址 用户输入
收件人地址 用户输入
签名 用户输入
日期 用户输入
正文
病假 我因发烧,请假一天
事假 参加婚礼,于2.27请假一天
PrintWriter BufferedWriter
第五篇:Java 实验 文件管理与IO流
作业要求:每个题保存为一个.java文件,保存在同一工程文件夹中,文件夹的名字为E:Java你的班级+姓名,例如:E:Java信息11张三。
注意:上交的程序包含程序的执行结果,以注释的形式附在程序后面。
实验六文件管理与I/O流
一、实验目的1.熟悉用文件File类创建、删除、查看文件或目录。
2.字节流、字符流、缓冲流、随机流等流式文件的创建,读写操作。
3.用字符流和缓冲流从键盘接受字符串的方法。
二、实验内容
1.先运行该程序。源文件是sy6_1.java。然后按【思考问题】分析程序。
import java.io.*;
public class sy6_1{
public static void main(String[] args)throws Exception
{
int x=0;
File Mypath;
Mypath=new File(“E:aaaa”);
if(!Mypath.exists())
{System.out.println(“创建新目录”);Mypath.mkdir();}
else System.out.println(“目录已存在”);
File Myfile1=new File(Mypath,“myfile1.txt”);
File Myfile2=new File(Mypath,“myfile2.txt”);
File Myfile3=new File(Mypath,“myfile3.txt”);
FileInputStream Fin=new FileInputStream(Myfile1);
FileOutputStream Fout=new FileOutputStream(Myfile1);
DataOutputStream Dout=new DataOutputStream(new FileOutputStream(Myfile2));
DataInputStream Din=new DataInputStream(new FileInputStream(Myfile2));
PrintWriter PWout=new PrintWriter(new FileWriter(Myfile3));
RandomAccessFile RAread=new RandomAccessFile(Myfile3,“r”);
String str;
int num1;
BufferedReader buf;//缓冲流
buf=new BufferedReader(new InputStreamReader(System.in));
System.out.print(“请输入一个小于255整型数:”);
while(!(str=buf.readLine()).equalsIgnoreCase(“q”))
{ System.out.print(“请输入另一个小于255整型数,按Q结束:”);
num1=Integer.parseInt(str);
Fout.write(num1);
}Fout.close();
System.out.println(“你刚输入的数据是:”);
while((x=Fin.read())!=-1)
{ System.out.println(x);
}Fin.close();
System.out.print(“请输入int范围内整型数:”);
while(!(str=buf.readLine()).equalsIgnoreCase(“q”))
{ System.out.print(“请输入另一个整型数,按Q结束:”);
num1=Integer.parseInt(str);
Dout.writeInt(num1);
}Dout.close();
int leng=Din.available()/4;
int xxx=0;
while(xxx { xxx++; x=Din.readInt(); System.out.println(x); } Din.close(); System.out.print(“请输入第一个字符串:”); while((str=buf.readLine())!=null) { System.out.print(“请输入另一个字符串,按Ctrl+Z结束:”); PWout.println(str);//写入myfile3.txt中 } PWout.close(); RAread.seek(0); while(RAread.getFilePointer() {System.out.println(RAread.readLine());//从myfile3.txt中一行一行读并输出在控制台上 } RAread.close(); System.out.println(“完成”); } } 【思考问题】 ① 本程序共用到哪几种流式文件?都用于做什么? 答:基本输入输出流:System.in.输入(从键盘) System.out.输出(显示器) 字节流类:FileOutputStream 文件输出 FileInputStream 文件输入 DataOutputStream数据输出 DataInputStream数据输入 字符流类:PrintWriter输入 缓冲文件流:BufferedReader ② 运行完程序后,请用“我的电脑”找到创建的文件,并分别打开文件看其内容,你 看到的是你输入的数据吗? 答:myfile1和myfile2中的数据非输入数据,myfile3中可以看见输入的数据。③ 将创建输入流对象Fin放在输出流Fout前,看发生什么? ④ 对第二种流式文件判断文件占用字节的长度用available()方法,而此处用int leng=Din.available()/4;为什么除以4? 2.按照第1题的内容,修改程序要求每次重新运行不覆盖原内容,把所有其它流式文件全部改用随机流式文件来实现,新的数据填加在文件尾,然后读出校验。 import java.io.*; public class sy6_2 { public static void main(String[] args)throws Exception { File Mypath; Mypath = new File(“E:aaa”); if(!Mypath.exists()) {System.out.println(“创建新目录”);Mypath.mkdir();} else System.out.println(“目录已存在”); File Myfile1 = new File(Mypath, “myfile1.txt”); File Myfile2 = new File(Mypath, “myfile2.txt”); File Myfile3 = new File(Mypath, “myfile3.txt”); RandomAccessFile rf1 = new RandomAccessFile(Myfile1, “rw”); RandomAccessFile rf2 = new RandomAccessFile(Myfile2, “rw”); RandomAccessFile rf3 = new RandomAccessFile(Myfile3, “rw”); String str; int num1; BufferedReader buf;//缓冲流 buf = new BufferedReader(new InputStreamReader(System.in)); System.out.print(“请输入一个小于255整型数:”); rf1.seek(rf1.length());//指针移到文件尾进行写操作 while(!(str=buf.readLine()).equalsIgnoreCase(“q”)) { System.out.print(“请输入另一个小于255整型数,按Q结束:”);num1=Integer.parseInt(str); rf1.write(num1);//将整型数作为ascii码值所对应的字符写入myfile1.txt中} rf1.seek(0);//指针移到文件头进行读操作 int x=0; while((x=rf1.read())!=-1) { System.out.println(x); } rf1.close(); System.out.print(“请输入int范围内整型数:”); rf2.seek(rf2.length()); while(!(str = buf.readLine()).equalsIgnoreCase(“q”)){ System.out.print(“请输入另一个整型数,按Q结束:”); num1 = Integer.parseInt(str); rf2.writeInt(num1); } int x1 = 0; for(int l = 0;l { rf2.seek(l*4); x1 = rf2.readInt(); System.out.println(x1); } rf2.close(); System.out.print(“请输入第一个字符串:”); rf3.seek(rf3.length()); while((str = buf.readLine())!= null){ System.out.println(“请输入另一个字符串,按Ctrl+Z结束:”);rf3.writeUTF(str);//写入myfile3.txt中 } rf3.seek(0); while(rf3.getFilePointer()< rf3.length()){ System.out.println(rf3.readUTF());//从myfile3.txt中读出字符串并输出在控制台上 } rf3.close(); System.out.println(“完成”); } } 三、实验报告要求 1.回答第1题【思考问题】提出的问题。 2.写出第二题要求的源程序。