实验9 Java输入输出流
- 格式:doc
- 大小:63.00 KB
- 文档页数:5
成都大学实验报告实验项目名称Java的输入与输出流一、实验目的:1. 理解I/O流的概念,掌握其分类2. 掌握文本文件读写、二进制文件读写二、实验内容(包括源程序及相关说明):1. 分别使用FileWriter 和BufferedWriter 往文件中写入10万个随机数,比较用时。
源代码如下:(1)import java.io.*;public class Ex1_1 {public static void main(String[] args) throws IOException{long t=System.currentTimeMillis();FileWriter fw =new FileWriter("d:\\Ex1.txt");for(int i=1;i<=100000;i++){fw.write((int)(Math.random()*10000)+" \n");}fw.close();t=System.currentTimeMillis()-t;System.out.println("The elapsed: "+t);}}(2)import java.io.*;public class Ex1_1 {public static void main(String[] args) throws IOException{long t=System.currentTimeMillis();BufferedWriter fw=new BufferedWriter(new FileWriter("d:\\Ex1.txt"));for(int i=1;i<=100000;i++){fw.write((int)(Math.random()*10000)+"\n");}fw.close();t=System.currentTimeMillis()-t;System.out.println("The elapsed: "+t);}}2. 生成一个html文件,使其能显示2的幂次(0~9)的表格如下:代码如下:import java.io.*;public class Ex1_1 {public static void main(String[] args) throws IOException{BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\Ex2.html"));bw.write("<table border=1 align=center width=200 height=250>");bw.newLine();bw.write("<tr><td align=center>Power of 2<td align=center>Value</tr>");for(int i=0;i<=9;i++){bw.write("<tr><td align=center>"+i+"<td align=center>"+Math.pow(i, 2)+"</tr>");}bw.write("</table>");bw.newLine();bw.close();}}3. 在文本文件bigbook.txt中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数,并显示统计的时间。
java输入输出语句例子Java语言中的输入输出语句是开发者经常使用的重要命令之一。
在本文中,我们将通过几个例子来展示Java中如何使用输入输出语句。
1. 导入Java中的I/O库在使用Java中的输入输出语句之前,我们需要先导入Java中的I/O库。
通过这个库,我们可以轻松地从键盘读取输入、从文件中读取输入和将输出写入文件。
在Java中,我们通常使用java.io包中的类来处理输入输出任务。
为了导入这个包,我们只需要在Java程序的开头添加以下代码:```import java.io.*```2. 使用Java中的输入输出语句一旦我们导入了Java中的I/O库,我们就可以开始使用Java中的输入输出语句了。
以下是几个例子:- 读取键盘输入并将其打印出来```import java.io.*public class InputOutputExample{public static void main(String args[]) throws IOException{BufferedReader inp = new BufferedReader(new InputStreamReader(System.in));System.out.println("Enter your name: ");String name = inp.readLine();System.out.println("Hi " + name + ", nice to meet you!"); }}```在这个例子中,我们创建了一个BufferedReader对象,并使用它来读取来自键盘的输入。
我们使用System.in作为我们的输入源,并使用InputStreamReader将它们从字节流转换为字符流。
最后,我们使用BufferedReader的readLine()方法来读取用户输入。
基于Java⽂件输⼊输出流实现⽂件上传下载功能本⽂为⼤家分享了Java实现⽂件上传下载功能的具体代码,供⼤家参考,具体内容如下前端通过form表单的enctype属性,将数据传递⽅式修改为⼆进制”流“的形式,服务端(servlet)通过 getInputStream() 获取流信息,运⽤java I/O 流的基础操作将流写⼊到⼀个服务端临时创建的⽂件temp中,然后再次利⽤⽂件基本操作,读取并截取临时⽂件内容,根据其中信息创建相应的⽂件,将读取出来的具体信息写⼊,下载时,根据提交的⽂件名称,找到服务器端相应的⽂件,然后根据输出流outStream输出到页⾯,同时将servlet的响应类型和响应头进⾏设置。
具体传输流程如下图:流信息的部分为:具体代码如下:前端代码:<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title><script src="Js/jquery.js"></script></head><body><form action="FileUpServlet" method="post" enctype="multipart/form-data"><table><tr><td>请选择上传⽂件:</td><td><input id="myfile" name="myfile" type="file" value="" /></td><td><input type="submit" value="上传"></td></tr><tr><td>${info}</td></tr></table></form>⽂件下载:<a href="FileLoadownServlet?filename=${filename}">${filename}</a></body></html>上传servlet部分(核⼼)@WebServlet("/FileUpServlet")public class FileUpServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public FileUpServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubdoPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubrequest.setCharacterEncoding("utf-8");InputStream filesource = request.getInputStream();//request获取流信息String tempname = "D:/temp";//tempfile代表临时存放⽂件File tempfile = new File(tempname);//创建临时⽂件FileOutputStream outputStream = new FileOutputStream(tempfile);//输出流对象,指定输出指tempfile⽬录下byte b[] = new byte[1024];int n;while((n = filesource.read(b))!= -1)//从输出流中每次读取1024字节,直⾄读完{outputStream.write(b,0,n);}outputStream.close();filesource.close();//关闭输⼊输出流/*以下为具体的⽂件操作,主要为解析临时产⽣的 temp⽂件,知识多为java输⼊输出流的内容!*/RandomAccessFile randomfile = new RandomAccessFile(tempfile, "r");//随机流,指定要读临时⽂件,只读randomfile.readLine();//读取第⼀⾏,⽆效数据,不需要String str = randomfile.readLine();//读取第⼆⾏int beginIndex = stIndexOf("=")+2;//指定所需数据的开始位置int endIndex = stIndexOf("\"");//指定所需数据截⾄位置String filename = str.substring(beginIndex,endIndex);//截取⽂件名//重新定位⽂件指针,获取⽂件内容randomfile.seek(0);//⽂件指针从头开始long startext = 0;int i = 1;//⽂件内容开始位置while((n=randomfile.readByte()) != -1&&i <= 4){if(n=='\n'){startext = randomfile.getFilePointer();i++;}}startext = randomfile.getFilePointer() - 1;//获取⽂件内容结束位置randomfile.seek(randomfile.length());long endtext = randomfile.getFilePointer();int j = 1;while(endtext >= 0 && j <= 2){endtext--;randomfile.seek(endtext);if(randomfile.readByte()=='\n'){j++;}}endtext = endtext-1;//将临时⽂件保存⾄指定⽬录中String realpath = getServletContext().getRealPath("/")+"images";//设置⽂件保存⽬录System.out.println(realpath);File fileupload = new File(realpath);if(!fileupload.exists()){fileupload.mkdir();//⽬录不存在则创建}File savefile = new File(realpath,filename);RandomAccessFile randomAccessFile = new RandomAccessFile(savefile, "rw");randomfile.seek(startext);while(startext<endtext){randomAccessFile.write(randomfile.readByte());//⽂件写⼊startext = randomfile.getFilePointer();}//关闭各种输⼊输出流randomAccessFile.close();randomfile.close();tempfile.delete();//删除临时⽂件SimpleDateFormat timed = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date nowdate = new Date();String time = timed.format(nowdate.getTime());request.setAttribute("info", time+" "+filename+"上传成功!");request.setAttribute("filename", filename);request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}下载部分protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubString filename = request.getParameter("filename");String path = getServletContext().getRealPath("/")+"images/";File file = new File(path+filename);//找到⽂件if(file.exists())response.setContentType("application/x-msdownload"); //设置响应类型,此处为下载类型response.setHeader("Content-Disposition", "attachment;filename=\""+filename+"\"");//以附件的形式打开 InputStream inputStream = new FileInputStream(file);ServletOutputStream outputStream = response.getOutputStream();byte b[] = new byte[1024];int n;while((n = inputStream.read(b)) != -1){outputStream.write(b,0,n);}outputStream.close();inputStream.close();}else{request.setAttribute("result", "⽂件不存在!下载失败!");request.getRequestDispatcher("/fildeOp.jsp").forward(request, response);}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
第九章 Java输入输出操作9.1 Java 输入输出流所有的程序语言都提及与本机文件系统交互的方式;Java也不例外。
我们将看看Java 是怎样处理标准文件输入输出的(包括stdin,stout,stderr)。
当你在网络上开发小程序时,你必须注意直接文件输入输出是不安全因素的关键。
大多数用户设置他们的浏览器,可让你自由的访问他们的文件系统,但有的不让你访问。
当然,如果你开发你内部的应用程序,你也许需要直接访问文件。
标准输入输出Unix的用户,或其他基于命令行系统的用户(如DOS),都知道标准输入输出的含义。
标准输入文件是键盘,标准输出文件是你的终端屏幕。
标准错误输出文件也指向屏幕,如果有必要,它也可以指向另一个文件以便和正常输出区分。
系统类Java通过系统类达到访问标准输入输出的功能。
上面提到的三个文件在这个系统类中实现:Stdin System.in作为InputStream类的一个实例来实现stdin,你可以使用read()和skip(long n)两个成员函数。
read()让你从输入中读一个字节,skip(long n)让你在输入中跳过n个字节。
Stout System.out作为PrintStream来实现stdout,你可以使用print()和println()两个成员函数。
这两个函数支持Java的任意基本类型作为参数。
Stderr System.err同stdout一样实现stderr。
象System.out一样,你可以访问PrintStream 成员函数。
9.2 标准输入输出例子import java.io.* class myCat{public void main(String args[]) throws IOException{int b;int count = 0;while ((b = System.in.read()) != -1){count++;System.out.print((char)b);}System.out.println(); //blank line System.err.println("counted"+count+"total bytes.");}}9.3 普通输入输出类除了基本的键盘输入和屏幕输出外,我们还需要联系文件的输入输出。
java 标准输入输出流
计算机系统都有标准的输入设备和标准输出设备。
对一般系统而言,标准输入设备通常是键盘,而标准输出设备是屏幕。
Java程序经常需要从键盘上输入数据,从屏幕上输出数据,为此频繁创建输入/输出流对象将很不方便。
因此,Java语言事先定义好了两个对象,分别对系统的标准输入和标准输出相联系,如System.in和System.out,另外还定义了标准的System.err错误输出流。
System.in是标准输入流,是InputStream类的实例。
可以使用read()方法从键盘上读取字节,也可以将它包装成数据流读取各种类型的数据和字符串。
在使用System.in的read()方法时,由于read()方法在定义时抛出了IOException 异常,所以必须使用try-catch结构捕获异常或声明抛出异常;
System.out和System.err是标准输出流和标准错误输出流,是PrintStream类的实例。
如果从标准输入流键盘上输入基本数据类型,可以将标准输入流包装成具有缓
执行上述代码,结果如图12-12所示。
图12-12 System.in 标准输入流。
实验四Java输入、输出和异常处理一、实验目的1.了解I/O流的使用;2.掌握常见的输入/输出流类及其主要方法。
3.熟悉S y s t e m类,掌握标准输入/输出。
4.学会利用Tr y-c a t c h-f i n a l l y语句来捕获和处理异常;5.掌握自定义异常类的方法。
二、实验要求1.使用标准数据流的应用程序。
2.使用文件输入输出流的应用程序。
3.通过编程理解系统异常处理的机制和创建自定义异常的方法。
三、实验内容(一)使用标准数据流的应用程序标准数据流指在字符方式下(如D O S提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。
1.程序功能:将键盘上输入的字符在屏幕上显示出来。
2.编写S Y4_1.j a v a程序文件,源代码如下:c l a s s S Y4_1{p u b l i c s t a t i c v o i d m a i n(S t r i n g[]a rg s)t h r o w s j a v a.i o.I O E x c e p t i o n {b y t e b u ff e r[]=n e w b y t e[10];S y s t e m.o u t.p r i n t l n("从键盘输入不超过10个字符,按回车键结束输入:");i n t c o u n t=S y s t e m.i n.r e a d(b u f f e r);//读取输入的字符并存放在缓冲区b u ff e r中S y s t e m.o u t.p r i n t l n("保存在缓冲区b u ff e r中元素的个数为:"+c o u n t);S y s t e m.o u t.p r i n t l n("b u f f e r中各元素的值为:");f o r(i n t i=0;i<c o u n t;i++){S y s t e m.o u t.p r i n t(""+b u ff e r[i]);//在屏幕上显示b u ff e r 元素的值}S y s t e m.o u t.p r i n t l n();S y s t e m.o u t.p r i n t l n("输出b u ff e r字符元素:");S y s t e m.o u t.w r i t e(b u ff e r,0,b u f f e r.l e n g t h);}}3.编译、运行S Y4_1.j a v a文件。
实验九输入输出流1.实验目的1、掌握字符输入、输出流的用法2、掌握使用Scanner类解析文件3、掌握Console流的使用2.实验内容1、根据附录里的源代码,按照注释要求,完成代码填空,使程序能够运行得出结果。
1) 实验1举重成绩单2) 实验2统计英文单词3) 实验3密码流4) 实验4学读汉字5)实验5 读取Zip文件2、设计编写程序完成以下任务。
1)修改实验2,要求按字典顺序输出全部不相同的单词。
2)参考实验3编写一个程序,程序运行时,要求用户输入的密码是:hello。
如果用户输入了正确的密码。
程序将输出“你好,欢迎你!”。
程序允许用户2次输入的密码不正确,一旦超过2次,程序将立刻退出。
3)在本机的磁盘系统中,找一个文件夹,利用File类的提供方法,列出该文件夹中的所有文件的文件名和文件的路径,执行效果如下:路径是xxx的文件夹内的文件有:文件名:abc.txt路径名:c:\temp\abc.txt--------------------------------------------文件名:def.txt路径名:c:\temp\def.txt知识点:File管理4)使用java的输入输出流将一个文本文件的内容读出并在控制台将文件中的内容打印出来。
(参考书上P289页)5)从控制台输入一串字符串,将该串字符串写入到磁盘某位置上的out.txt文件中去。
(参考教材P290页)6)使用java的输入输出流将一个文本文件的内容按行读取,每读一行就顺序添加行号,并写入到另一个文件中.7)定义一个Person类,包含姓名、年龄、身份证号码属性。
有一个带参数的构造方法用于对所有属性赋值,还有一个study的方法,里面只打印一条“我喜欢学习”的话。
写一个Test类,里面实例化若干个Person对象,并将这些对象写入到obj.txt文件中去。
8)创建c:/test.txt文件并在其中输入"hello world"创建一个输入流读取该文件中的文本并且把小写的l变成大写L再利用输出流写入到d:\test.txt中实现步骤:(1)在本地硬盘C盘下创建一个文件test.txt(2)创建一个包含main()方法的类,并在main中编写代码(3)运行代码并且测试结果实现过滤器的功能效果显示:知识点:IO字符流、String常用方法3.实验步骤略4.评分标准1.A——内容功能完善,编程风格好,人机接口界面好;2.B——内容功能完善,编程风格良好,人机接口界面良好;3.C——完成必做内容;4.D——能完成必做内容;5.E——未按时完成必做内容,或者抄袭(雷同者全部为E).参照书上实验按模版要求,将【代码】替换为Java程序代码,编写好完整的程序文档,最后运行得到的相关文件,把实验所得文件一起打包上交。
▇▆大学计算机与信息技术学院实验报告姓名□□□学号▅▅▅▅专业班级▅▅课程名称 Java实验实验日期♣♣♣♣成绩指导教师▇▇██批改日期实验名称实验9 Java的输入输出流●实验目的1. 理解I/O流的概念,掌握其分类2. 掌握文本文件读写、二进制文件读写●实验内容1. 分别使用FileWriter 和BufferedWriter 往文件中写入1万个随机数,比较用时的多少?(用时采用方法System.currentTimeMillis())求时间差;使用:FileWriter程序源代码import java.io.*;public class TestFileWriter {public static void main(String []args) throws IOException{File f = new File("C:/java/tem.txt");if (f.exists()){System.out.printf("文件\"C:/java/tem.txt\"已存在");System.exit(0);}FileWriter fileWriter = new FileWriter(f);long time = System.currentTimeMillis();for(int i=0;i<10000;i++)fileWriter.write((int)(Math.random()*101));fileWriter.close();time = System.currentTimeMillis() - time;System.out.printf("使用FileWriter耗时:"+time+"毫秒");}}程序运行结果贴图使用:BufferedWriter程序源代码import java.io.*;public class TestBufferedWriter {public static void main(String []args) throws IOException{File f = new File("C:/java/tem2.txt");FileWriter fileWriter = new FileWriter(f,true);BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);long time = System.currentTimeMillis();for(int i=0;i<10000;i++)bufferedWriter.write((int)(Math.random()*101));bufferedWriter.close();time = System.currentTimeMillis() - time;System.out.printf("使用BufferedWriter耗时:"+time+"毫秒");}}程序运行结果贴图2.课本P547,19.2 :编写一个文件,如果文件Exercise 19_2.dat 不存在,就创建一个名为Exercise 19_2.txt的文件。
向这个文件追加新数据。
使用二进制I/O将100个随机生成的整数写入这个文件中。
程序源代码import java.io.*;public class Test19_2 {public static void main(String []args) throws IOException{File f0 = new File("C:/java/Exercise19_2.dat");if(!f0.exists()){File f = new File("C:/java/Exercise19_2.txt");DataOutputStream out = new DataOutputStream(new FileOutputStream(f,true));for(int i=0;i<100;i++) out.writeInt((int)(Math.random()*101)); out.close(); } System.out.printf("追加数据完成!");}}程序运行结果贴图3.课本P547 19.3:(对二进制数据文件中的所有数据求和)假设已经使用DataOutputStream中的writeInt(int)创建一个名为Exercise 19_3.dat的二进制数据文件,文件包含数目不确定的整数,编写一个程序来计算这些整数的总和。
程序源代码import java.io.*;public class SumFileData {public static void main(String []args) throws IOException{File f = new File("C:/java/sumData.dat");DataOutputStream output = new DataOutputStream(new FileOutputStream(f));int num = (int)(1+Math.random()*1000);for(int i=0;i<num;i++)output.writeInt((int)(1+Math.random()*1000));output.close();System.out.println("已经写入"+num+"个1~1000的整数");int sum = 0;DataInputStream input = new DataInputStream(new FileInputStream(f));try{ while(true){sum = sum + input.readInt();}}catch(EOFException ex){System.out.println("数据已读取完!");System.out.println(num+"个整数和为:"+sum);}}}程序运行结果贴图4.在文本文件bigbook.txt中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数,并显示统计的时间。
程序源代码import java.io.*;public class coutA {public static void main(String []args) throws IOException{File f = new File("C:/java/bigbook.txt");FileInputStream input = new FileInputStream(f);int cout = 0;int c;long t = System.currentTimeMillis();while((c=input.read())!=-1){if(c=='A') cout++; }System.out.println("数据已读取完毕!");System.out.println("字母‘A’的个数为"+cout);System.out.println("统计时间为"+(System.currentTimeMillis() - t)+"毫秒");}}程序运行结果贴图5.编写一个Java应用程序,给当前的类所在的文件ReadExample.java添加行号拷贝到另一个文件temp.text。
程序源代码import java.util.*;import java.io.*;public class ReadExample{public static void main(String []args) throws FileNotFoundException{File f = new File("ReadExample.java");File f0 = new File("Temp.txt");Scanner in = new Scanner(f);PrintWriter out = new PrintWriter(f0);int i = 0;while(in.hasNext()){ out.println(i+"\t"+in.nextLine()); i++; }in.close();out.close();System.out.println("拷贝完毕!");}}程序运行结果贴图P547 19.5(将对象和数组存储在文件中)编写一个程序,向一个名为Exercise19_5.dat的文件中存储一个含5个int值1,2,3,4,5的数组,存储一个表示当前时间的Date对象,存储一个double值5.5程序源代码import java.io.*;import java.util.*;public class ObjectSave {public static void main(String []args) throws IOException, ClassNotFoundException{ File f = new File("C:/java/Exercise19_5.dat");int[]array = {1,2,3,4,5};double d = 5.5;ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(f));out.writeObject(array);out.writeObject(new Date());out.writeDouble(d);out.close();System.out.println("存储成功!");ObjectInputStream in = new ObjectInputStream(new FileInputStream(f));int[]a = (int[])in.readObject();Date dat = (Date) in.readObject();System.out.println("存储的数组为:");for(int i=0;i<a.length;i++)System.out.print(a[i]+"\t");System.out.println("\n存储的时间为:"+dat);System.out.println("存储的Double数据为:"+in.readDouble());in.close();}}程序运行结果贴图P548 19.12(组合文件)编写一个工具程序,使它能够用下面的命令,将文件组合在一起构成一个新文件:java Exercise19_12 SourceFile1…SourceFilen TargetFile这个命令将 SourceFile1,…,SourceFilen合并为TargetFile。