第八章 JAVA文件和输入输出流.
第08章 网络和文件编程实例
![第08章 网络和文件编程实例](https://img.taocdn.com/s3/m/0f82880dba1aa8114431d95c.png)
OutputStream方法 输出流OutputStream提供了三个基本的 write()方法:int write()、int write(byte []) 和int write(byte[], int ,int ),以及其他方 法:void close()和void flush()。
基本的流类
随机存取文件
Java编程语言提供了一个RandomAccessFile 类来处理这种类型的输入输出。
串行化(Serializable) java.io.Serializable接口没有任何方法, 它只作为一个“标记者”,用来表明 实现了这个接口的类可以考虑串行化。 类中没有实现Serializable的对象不能保 存或恢复它们的状态。
第08章 网络和文件编程实例 08章
8.1流式I/O 8.2 Java网络编程 8.3 Java文件操作
8.1流式I/O
流的基础知识 InputStream方法 OutputStream方法 基本的流类
流的基础知识
InputStream方法 输入流InputStream提供的方法主要有三 个基本的read()方法:int read()、int read(byte [])和int read(byte[], int ,int ),以 及其他方法:void close()、int available()、 skip(long)、boolean markSupported()、void mark(int)和void reset(int)。
8.2 Java网络编程
Java的网பைடு நூலகம்编程 一个TCP/IP通信的例子 一个UDP通信的例子
Java的网络编程
socket是指在一个特定编程模型下,进程间通 信链路的端点。因为这个特定编程模型的流 行,socket这个名字在其他领域得到了复用, 包括Java技术。当进程通过网络进行通信时, Java Java技术使用它的流模型。一个socket包括两 个流:一个输入流和一个输出流。
Java的输入与输出流(实验报告)
![Java的输入与输出流(实验报告)](https://img.taocdn.com/s3/m/7a543195a32d7375a517801c.png)
成都大学实验报告实验项目名称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输入输出》课件](https://img.taocdn.com/s3/m/1a3756f168dc5022aaea998fcc22bcd127ff425f.png)
通过格式化字符串将数据输出到控制台。
String.format
将数据格式化字符串并返回格式化结果。
异常处理
1
try -catch语句
通过添加try-catch语句来处理异常。
2
fin ally 语句
无论是否发生异常,finally语句块中的代码都会执行。
3
自定义异常
开发自定义异常来处理特殊情况。
字符输入输出
字符读取
使用Reader类读取字符信息。
字符写入
使用Writer类向文件中写入字符信息,可支持中文。
二进制输入输出
1 输入
使用BufferedInputStream类从二进制文件中读取信息。
2 输出
使用BufferedOutputStream类将信息写入二进制文件中。
格式化输入输出
控制台输出
使用System.out.print来在控制台输出信息。
键盘输入
使用Scanner类从键盘获取用户输入的信息。
文件输入输出
1
文件读取
使用File类和Scanner类从文件中读取信息。
2
文件写入
使用FileWriter类和PrintWriter类信息写入文件中。
3
二进制文件读写
使用InputStream和OutputStream类读写二进制文件。
《java输入输出》PPT课件
本课程将教您如何处理各种输入输出并展示Java编程语言的强大功能。
输入输出概述
输入
从外部读取数据到计算机中,例如键盘输入。
处理
综合输入和输出,对外部数据做出处理。
输出
将数据从计算机输出到外部,例如屏幕输出。
基于Java文件输入输出流实现文件上传下载功能
![基于Java文件输入输出流实现文件上传下载功能](https://img.taocdn.com/s3/m/3c146fc1250c844769eae009581b6bd97f19bcd5.png)
基于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语言程序设计(郑莉)第八章课后习题答案
![Java语言程序设计(郑莉)第八章课后习题答案](https://img.taocdn.com/s3/m/d80103607f21af45b307e87101f69e314332fa1f.png)
Java语言程序设计(郑莉)第八章课后习题答案1.进程和线程有何区别,Java是如何实现多线程的。
答:区别:一个程序至少有一个进程,一个进程至少有一个线程;线程的划分尺度小于进程;进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
Java程序一般是继承Thread类或者实现Runnable接口,从而实现多线程。
2.简述线程的生命周期,重点注意线程阻塞的几种情况,以及如何重回就绪状态。
答:线程的声明周期:新建-就绪-(阻塞)-运行--死亡线程阻塞的情况:休眠、进入对象wait池等待、进入对象lock池等待;休眠时间到回到就绪状态;在wait池中获得notify()进入lock池,然后获得锁棋标进入就绪状态。
3.随便选择两个城市作为预选旅游目标。
实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000毫秒以内),哪个先显示完毕,就决定去哪个城市。
分别用Runnable接口和Thread类实现。
(注:两个类,相同一个测试类)//Runnable接口实现的线程runable类publicclarunnableimplementRunnable{privateStringcity;publicr unnable(){}publicrunnable(Stringcity){thi.city=city;}publicvoidrun(){for(inti=0;i<10;i++){Sytem.out.println(city);try{//休眠1000毫秒。
Thread.leep(1000);}catch(InterruptedE某ceptione){e.printStackTrace();}}}}//Thread类实现的线程thread类publicclarunnablee某tendThread{privateStringcity;publicrunnable(){}publicrunnable(Stringcity){thi.city=city;}publicvoidrun(){for(inti=0;i<10;i++){Sytem.out.println(city);try{//休眠1000毫秒。
第八章输入输出处理输入输出处理是...
![第八章输入输出处理输入输出处理是...](https://img.taocdn.com/s3/m/0c978d9603d276a20029bd64783e0912a2167ced.png)
第八章输入/输出处理输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等,而键盘、监视器、磁盘存储设备都称为输入、输出源。
Java把这些不同类型的输入、输出源抽象为流(stream)。
Java程序可以用输入流从一些输入源读数据,用输出流向一些输出源写数据。
Jdk 提供了包java.io,其中包括一系列的类来实现输入/输出处理。
从jdk1.1开始,java.io包中的流包括字节流和字符流。
§8.1输入/输出字节流概述§8.1.1 I/O字节流的层次结构在java中,所有的输入流都是从抽象类InputStream继承而来,所有的输出流都是从OutputStream 继承而来。
以下给出了java语言IO包中输入/输出处理类之间的继承关系。
输入、输出字节流的类层次一、简单的输入、输出流1.FileInputStream和FileOutputStream:用于本地文件系统的文件读写。
2.PipedInputStream和PipedOutputStream:用于完成管道的输入和输出。
管道用于将一个程序(或线程或代码块)的输出引导进另一个程序(或线程或代码块)的输入,所有PipedInputStream必须连接到一个PipedOutputStream所有PipedOutputStream必须连接到一个PipedInputStream。
3.ByteArrayInputStream和ByteArrayOutputStream:读写内存数据。
4.SequenceInputStream:用于将多个输入流连接到一个输出流。
5.StringBufferInputStream:用于读取StringBuffer类可变字符串中的数据。
二、过滤流1.DataInputStream和DataOutputStream:用一种与机器无关的格式读写java语言的基本数据类型。
java 标准输入输出流
![java 标准输入输出流](https://img.taocdn.com/s3/m/8f3afe1b5f0e7cd184253632.png)
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程序设计基础第三版
![java程序设计基础第三版](https://img.taocdn.com/s3/m/f25ddd9d900ef12d2af90242a8956bec0875a512.png)
java程序设计基础第三版Java程序设计基础第三版Java是一种广泛使用的编程语言,以其跨平台的特性、面向对象的特性、健壮性、安全性和性能而闻名。
《Java程序设计基础》第三版是对Java语言的深入介绍,适合初学者和有一定编程基础的读者。
本版书籍在前两版的基础上,更新了Java语言的最新发展,并增加了一些实用的编程技巧。
第一章:Java语言概述Java语言由Sun Microsystems公司(现为Oracle公司)在1995年发布。
Java是一种纯面向对象的语言,这意味着在Java中,所有的数据都是对象。
Java的设计哲学是“一次编写,到处运行”(Write Once, Run Anywhere),这得益于它的虚拟机(JVM)技术。
第二章:Java开发环境搭建在开始Java编程之前,需要安装Java开发工具包(JDK),并配置环境变量。
此外,还可以使用集成开发环境(IDE)如Eclipse或IntelliJ IDEA来提高开发效率。
第三章:基本语法Java的基本语法包括数据类型、变量、运算符、控制语句等。
Java是强类型语言,所有变量在使用前必须声明其类型。
Java提供了丰富的控制语句,如if-else、switch、while、for等。
第四章:面向对象编程面向对象编程(OOP)是Java的核心特性。
本章介绍了类和对象的概念,以及如何使用类来封装数据和行为。
此外,还介绍了继承、多态和接口等OOP的基本概念。
第五章:数组和字符串数组是Java中存储固定大小的同类型元素的集合。
字符串是字符的序列,Java提供了String类来处理字符串,包括字符串的创建、连接、比较等操作。
第六章:集合框架Java集合框架提供了一套接口和类,用于存储和操作对象集合。
包括List、Set、Map等接口,以及ArrayList、HashSet、HashMap等实现类。
第七章:异常处理Java使用异常处理机制来处理程序运行时出现的错误。
JAVA输入输出流
![JAVA输入输出流](https://img.taocdn.com/s3/m/694706a70029bd64783e2c9f.png)
int read() int read(byte[] buffer) int read(byte[] buffer, int offset, int length)
其它方法:
void close() int available() skip(long n) boolean markSupported() void mark(int readlimit) void reset()
9.4常用输入输出流类(2)
FileReader-文件字符输入流
构造方法: public FileReader(String name) throws FileNotFoundException public FileReader(File file) throws FileNotFoundException
方法:参见InputStream FileOutputStream-文件字节输出流
构造方法: public FileOutputStream(String name) throws FileNotFoundException public FileOutputStream(File file) throws FileNotFoundException 方法:参见OutputStream
//标准输出流System.out是字节输出流
//把标准输出流转化成缓冲字节输出流 /用BufferedOutputStream中函数Write输出 //数据从缓冲区中全部输出
import java.io.*; public class Test3 { public static void main(String[] args) throws IOException{ String s = "Hello"; OutputStreamWriter o = new OutputStreamWriter(System.out); o.write(s); 把标准字节输出流转化 成字符输出流 o.flush(); } }
(完整版)java 试题
![(完整版)java 试题](https://img.taocdn.com/s3/m/6bd2610c02d276a201292e6b.png)
一、填空题1、Java的三大体系分别是_JavaSE_____、_JavaEE_____、_JavaME_____。
2、Java程序的运行环境简称之为JRE_____。
3、编译Java程序需要使用_javac_____命令。
4、javac.exe和java.exe两个可执行程序存放在JDK安装目录的bin______目录下。
5、path______环境变量用来存储Java的编译和运行工具所在的路径,而_classpath_____环境变量则用来保存保存Java虚拟机要运行的“.class”文件路径。
二、选择题1、以下选项中,哪些属于JDK工具?(多选)ABCDA、Java编译器B、Java运行工具C、Java文档生成工具D、Java打包工具2、Java属于以下哪种语言?C A、机器语言B、汇编语言C、高级语言3、下面哪种类型的文件可以在Java虚拟机中运行?D D、.class4、安装好JDK后,在其bin目录下有许多exe可执行文件,其中java.exe命令的作用是以下哪一种?B A、Java文档制作工具B、Java解释器C、Java编译器5、5、如果jdk的安装路径为:d:\jdk,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项?B A.d:\jdk; B.d :\jdk\bin; C.d:\jre\bin; D.d:\jre;三、问答题1、简述Java的特点。
面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。
2、2、简述JRE与JDK的区别JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,例如,IO类、GUI控件类、网络类等。
JRE是提供给普通用户使用的,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE。
java08(第8章输入输出流)
![java08(第8章输入输出流)](https://img.taocdn.com/s3/m/74814ebbfd0a79563c1e7246.png)
在java.io包中定义了很多这二个基本类具体实现 包中定义了很多这二个基本类具体实现 输入输出功能的子类, 输入输出功能的子类,表8.1为部分常用字节输入 为部分常用字节输入 流类和字节输出流子类的功能。 流类和字节输出流子类的功能。
表8.1
类 名 FileInputStream 和 FileOutputStream ByteArrayInputStream和 ByteArrayOutputStream ObjectInputStream 和 ObjectOutputStream FilterInputStream 和 FilterOutputStream DataInputStream 和 DataOutputStream BufferedInputStream 和 BufferedOutputStream
【例8-1 】
1. /* 读取文件 */ 2. import java.io.FileInputStream; 3. import javax.swing.JOptionPane; 4. class Example8_1 5. { public static void main( String args[ ]) 6. { byte buffer[ ] = new byte[2056]; 7. String str; 8. try{ 9. File file=new File("d:/jtest/test.dat"); 10. FileInputStream fileInput = new FileInputStream(file); 11. int bytes = fileInput.read( buffer, 0, 2056 ); //读到的字节数 读到的字节数 12. str = new String( buffer, 0, bytes ); 13. } 14. catch(Exception e) 15. { 16. str= e.toString(); 17. } 18. JOptionPane.showMessageDialog(null,str); 19. System.exit(0); //退出程序 退出程序 20. } 21. }
java中基本输入输出流的解释
![java中基本输入输出流的解释](https://img.taocdn.com/s3/m/066f4b63e55c3b3567ec102de2bd960590c6d97b.png)
java中基本输入输出流的解释1.网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节。
字节就是字节,在很大程度上,读服务器发送的数据与读取文件没什么不同;向客户传送数据与写入一个文件也没有什么区别。
Java中输入和输出组织不同于大多数其他语言。
它是建立在流(stream)上。
不同的基本流类(如java.io.FileInputStream和.TelnetOutputStream)用于读写特定的数据资源。
但是所有的基本输出流使用同一种基本方法读数据。
过滤器流可以连接到输入流或输出流。
它可以修改已经读出或写人的数据(例如,加密或压缩数据),或者可以简单地提供附加方法将已经读出或写入的数据转化成其他格式。
最后Reader和Writer也可以链接到输入流和输出流,从而允许程序读出和写入文本(即字符)而不是字节。
如果使用正确,Reader和Writer能够处理多种类型的字符编码,包括SJIS和UTF-8等多字节字符集。
一、输出流java的基本输出流是 java.io.OutputStream.public abstract class OutputStreamn public abstract void write(int b) throws IOExceptionn public void write(byte[] data) throws IOExceptionn public void write(byte[] data,int offset,int length) throws IOExceptionn public void flush() throws IOExceptionn public void close() throws IOExceptionOutputStream的子类使用这些方法向指定媒体写入数据。
我始终相信,我们理解了为什么它们存在,就会更好地记住它们,好,现在开始说一下OutputStream类的方法的由来public abstract void write(int b) throws IOExceptionOutputStream的基本方法是write(int b)。
Java-IO流
![Java-IO流](https://img.taocdn.com/s3/m/63a0d0c0da38376baf1faec9.png)
IO流一、流的概念程序的主要任务是操纵数据。
在Java中,把一组有序的数据序列称为流。
根据操作的方向,可以把流分为输入流和输出流两种。
程序从输入流读取数据,向输出流写出数据。
文件输入流输出流文件内存-------------------> Java程序------------------------>内存键盘控制台| |数据源数据目的地Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象。
如果数据流中最小的数据单元是字节,那么称这种流为字节流;如果数据流中最小的数据单元是字符,那么称这种流为字符流。
在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,java.io.Reader和java.io.Writer分别表示字符输入流和字符输出流。
注意:它们四个都是抽象类二、字节输入流和输出流概述在java.io包中,java.io.InputStream表示字节输入流,java.io.OutputStream表示字节输出流,它们都是抽象类,不能被实例化。
InputStream类提供了一系列和读取数据有关的方法:1.read(): 从输入流读取数据:有三种重载形式:a.int read():从输入流读取一个8位的字节(1字节是8位),把它转换为0-255之间的整数,并返回这一整数。
如果遇到输入流的结尾,则返回-1;b.int read(byte[] b): 从输入流读取若干个字节,把它们保存到参数b指定的字节数组中。
返回的整数表示读取的字节数。
如果遇到输入流的结尾,则返回-1;c.int read(byte[] b, int off, int len): 从输入流读取若干个字节,把它们保存到参数b指定的字节数组中。
返回的整数表示读取的字节数。
参数off指定在字节数组中开始保存数据的起始下标,参数len指定读取的字节数目。
Java输入输出流(一)——常用的输入输出流
![Java输入输出流(一)——常用的输入输出流](https://img.taocdn.com/s3/m/bc1aa36000f69e3143323968011ca300a6c3f67f.png)
Java输⼊输出流(⼀)——常⽤的输⼊输出流1.流的概念:在Java中,流是从源到⽬的地的字节的有序序列。
Java中有两种基本的流——输⼊流(InputStream)和输出流(OutputStream)。
根据流相对于程序的另⼀个端点的不同,分为节点流和过滤流。
(1)节点流:以特定源如磁盘⽂件、内存某区域或者线程之间的管道为端点的构造输⼊输出流,是⼀种基本的流。
(2)过滤流:以其他已经存在的流为端点构造的输⼊输出流。
根据流中的数据单位分为字节流和字符流。
(1)字节流:流中的数据是以8位字节为单位进⾏读写,以InputStream和OutputStream为基础类。
(2)字符流:流中的数据是以16为字符为单位进⾏读写,以Reader和Writer为基础类。
2.字节流InputStream和OutputStream是字节流的两个顶层⽗类,提供了输⼊流类和输出流类的通⽤API。
2.1 输⼊字节流InputStream基本⽅法:(1)基本读⽅法;: int read() int read(byte[] b) int read(byte[] b,int off,int len)(2) 关闭流:void close()(3) 返回输⼊流中还有多少可读字节 int available()(4) 跳过指定字节 long skip(long n)(5) 回读数据 boolean markSupported() void Mark(int readlimt) void reset()2.2 输出字符流OutputStream基本⽅法:(1)基本写⽅法:void write(int c) void write(byte[] b) void write(byte[] b,int off,int len)(2) 关闭流:void close()(3)q强制输出:void flush()3.字符流:Reader和Writer是字符流的顶层⽗类,字符流能够处理Unicode字符集中的所有字符。
文件输入输出流
![文件输入输出流](https://img.taocdn.com/s3/m/a64bbec182d049649b6648d7c1c708a1284a0acf.png)
文件输入输出流文件输入输出流是在计算机中进行文件读写操作的一种机制。
通过文件输入输出流,我们可以从文件中读取数据或者将数据写入文件中。
在程序开辟中,文件输入输出流常用于读取配置文件、读取和写入日志文件、进行数据持久化等操作。
文件输入输出流的基本概念和使用方法如下:1. 文件输入流(FileInputStream):用于从文件中读取数据。
- 创建文件输入流对象:可以使用FileInputStream类的构造方法来创建一个文件输入流对象。
需要提供文件路径作为参数。
- 读取数据:可以使用文件输入流对象的read()方法来读取数据。
read()方法会返回一个整数值,表示读取到的字节数据。
当读取到文件末尾时,read()方法会返回-1。
2. 文件输出流(FileOutputStream):用于将数据写入文件中。
- 创建文件输出流对象:可以使用FileOutputStream类的构造方法来创建一个文件输出流对象。
需要提供文件路径作为参数。
如果文件不存在,会自动创建新文件;如果文件已存在,会清空文件内容。
- 写入数据:可以使用文件输出流对象的write()方法来写入数据。
write()方法接受一个字节数组作为参数,将字节数组中的数据写入文件中。
文件输入输出流的使用示例:```javaimport java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FileIOExample {public static void main(String[] args) {// 文件输入流示例try {FileInputStream inputStream = new FileInputStream("input.txt");int data;while ((data = inputStream.read()) != -1) {System.out.print((char) data);}inputStream.close();} catch (IOException e) {e.printStackTrace();}// 文件输出流示例try {FileOutputStream outputStream = new FileOutputStream("output.txt"); String data = "Hello, World!";byte[] bytes = data.getBytes();outputStream.write(bytes);outputStream.close();} catch (IOException e) {e.printStackTrace();}}}```在上面的示例中,我们通过文件输入流读取了名为"input.txt"的文件中的数据,并使用文件输出流将字符串"Hello, World!"写入了名为"output.txt"的文件中。
输入流与输出流
![输入流与输出流](https://img.taocdn.com/s3/m/1d5e3d4fc77da26924c5b08f.png)
第八章 输入与输出流
键盘 程序
数据文件
屏幕 数据文件
综上所述,程序是数据处理中心。 无论是从键盘上读取数据或者从数据文件中读取数据都是由程序决定的。 把程序中的数据输出到屏幕上或者输出到数据文件中都是由程序决定的。
2
第八章 输入与输出流
8.1 流的概念
❖ 输入与输出流(I/O流) (1)输入流:把键盘上输入的数据或者是把数据文件中的数据 读入正在运行的程序中。(网络) (2)输出流:把正在运行的程序中的数据输出到屏幕上或者 输出到数据文件中。
5
第八章 输入与输出流
8.1 流的概念
❖ 字符流类:专门用于字符数据 ❖ 字节流类:用于一般目的
6
10.1 File类
首先讨论10.1.3节的内容,如何使用File类创建对象。对象可以是文件对象, 也可以是目录对象。
(1) 使用一个存在的文件创建一个文件对象;10.1.3 File f=new File("Example10_1.java"); 当前目录下已经存在文件: Example10_1.java
write方法的格式如下: public void write(byte b[]); public void write(byte b[],int off,int len);
作为字节流输入对象的文件,采用read方法按节读入到程序中;
作为字节流输出对象的文件,采用write方法按字节把程序的数据输出到字节 流输出对象的文件中;
10
第八章 输入与输出流
§10.1.4 使用Runtime 类运行可执行文件
◆用Runtime 类声明一个对象( Runtime类在ng包) Runtime ec;
◆ 然后使用该类的getRuntime()静态方法创建这个对象: ec=Runtime.getRuntime();
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
InputStream
三个基本的读方法
abstract int read() :读取一个字节数据,并返回 读到的数据,如果返回-1,表示读到了输入流的 末尾。
PipedInputStream
OutputStream
三个基本的写方法
abstract void write(int b) :往输出流中写入一个字节。 void write(byte[] b) :往输出流中写入数组b中的所有字节。 void write(byte[] b, int off, int len) :往输出流中写入数组b中从 偏移量off开始的len个字节的数据。
其它方法
void flush() :刷新输出流,强制缓冲区中的输出字节被写出。 void close() :关闭输出流,释放和这个流相关的系统资源。
java.io包中 OutputStream的类层次
OutputStream
FileOutputStream
ByteArrayOutputStream
void reset() :返回到上一个标记。
java.io包中 InputStream的类层次
FileInputStream
InputStream
ByteArrayInputStream
FilterInputStream
ObjectInputStream
DataInputStream BufferedInputStream
(2)然而,如果我们想获得一个受限列表— —例如,想得到所有扩展名为.java的文件— —那么我们就要用到“目录过滤器”,这 个类会告诉我们怎样显示符合条件的文件 对象。
可以在JDK文档里的类层次结构中查看 到。
通过继承,任何Inputstream或Reader衍 生而来的类都含有名为read()的基本 方法,用于读取单个字节或者字节数 组。
int read(byte[] b) :将数据读入一个字节数组,同 时返回实际读取的字节数。如果返回-1,表示读 到了输入流的末尾。
int read(byte[] b, int off, int len) :将数据读入一个 字节数组,同时返回实际读取的字节数。如果返 回-1,表示读到了输入流的末尾。off指定在数组b 中存放数据的起始偏移位置;len指定读取的最大 字节数。
在JDK1.4中,添加了nio类,用于改进 性能及功能。
我们需要学习相当数量的类。另外, 很有必要理解I/O类库的演化过程,
本章就介绍Java标准类库中各种各样的 类以及它们的用法。
流式I/O
“流(stream)”是个抽象概念,它代 表任何有能力产出数据的数据源对象 或者是有能力接收数据的接收端对象。
第8章 输入输出流I/O
一、输入输出流I/O是计算机的最基本操作。
比如从键盘输入数据、从文件中读取 数据或向文件中写数据、通过网络上 传或下载数据等。
Java类库的设计者是通过创建大量的 类来解决这个难题的。
在java中有关流的操作使用 io 包 import java.io.*;
适用于16位的字符文件 每次读写16位字符 效率较高
Java.io中的四个类:
以字节为对象: 输入流:InputStream 输出流:OutputStream
以字符为对象: 输入流: Reader 输出流: Writer
文件处理:File类
在学习那些真正用于在流中读写数据的类 之前,让我们先看看一个实用工具,它提 供了一个用于帮助我们处理文件目录事务 的类库。
其它方法
long skip(long n) :在输入流中跳过n个字节,并 返回实际跳过的字节数。 void close() :关闭输入流,释放和这个流相关的 系统资源。
void mark(int readlimit) :在输入流的当前位置放 置一个标记,如果读取的字节数多于readlimit设置 的值,则流忽略这个标记。
FilterOutputStream ObjectOutputStream PipedOutputStream
DataOutputStream
BufferedOutputStream
文件流
FileInputStream(字节文件输入流) FileOutputStream 字节文件输出流) 节点流,用于从文件中读取或往文件 中写入字节流。
File(文件)类。它既能代表一个特定文件的 名称又能代表一个目录下的文件集合的名 称。如果它指的是一个文件集,我们就可 以对此集合调用list()方法,这个方法会 返回一个字符数组。
实际上,“文件路径”对这个类来说是个 更好的名字。
(1)目录的检查及创建
文件类不仅仅只表示存在的文件或目 录。
我们也可以用文件对象来创建新的目 录或不存在的整个目录路径。
我们还可以查看文件的特性(如:大 小,最后修改日期,读/写),来检查 某个文件对象代表的是一个文件还是 一个目录,并可以删除这个文件。
(2)目录列表器
假设我们想查看一个目录列表,可以用两 种方法列出文件对象。
(1)如果我们调用不带参数的list()方法, 便可以获得此文件对象包含的全部列表。
二进制文件的处理
文件对象的建立
File fp=new File(“file1.dat”); FileInputStream类:可以用它来从
文件中读取字节。 FileOutputStream类:创建一个可用
来将字节写入文件的输出流。
FileInputStream类的常用方法:
就流的运行方向来说,有两种基本的 流是:输入流(Input Stream)和输出流 (Output Stream)。可从中读出一系列字 节的对象称为输入流。而能向其中写 入一系列字节的对象称为输出流。
按处理数据的类型
字节流
适用于各类文件
每次读写8位字节 效率较低
字符流