140 likes | 283 Views
第一章 第十三节 输入输出流. 第一章 第三节 java 的基本语法. 上节回顾. 掌握 java 中异常的概念 掌握 java 异常的分类 掌握 java 异常的捕获和处理. 本节主要内容. 掌握输入 / 输出 (I/O) 流的概念 掌握 File 类 掌握流的分类. 知识点一: 输入 / 输出 (I/O) 流的概念 在 java 中,对于数据的输入 / 输出操作以“流”( stream )的方式进行,我们利用流来从硬盘的文件中读数据到你的程序中 , 利用流来写数据到硬盘的文件
E N D
第一章 第十三节 输入输出流 第一章 第三节 java的基本语法
上节回顾 掌握java 中异常的概念 掌握java 异常的分类 掌握java 异常的捕获和处理
本节主要内容 掌握输入/输出(I/O)流的概念 掌握File 类 掌握流的分类
知识点一:输入/输出(I/O)流的概念 在java中,对于数据的输入/ 输出操作以“流”(stream)的方式进行,我们利用流来从硬盘的文件中读数据到你的程序中,利用流来写数据到硬盘的文件 站在内存的角度分析:往内存里面放信息----输入内存里的信息往外写----输出 即:相对于程序而言,读进来的就叫输入流,写出去的就叫输出流 注:Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 Java.io是大多数面向数据流的输入/输出类的主要软件包
知识点二:File File不属于流,它只是用来屏闭不同文件系统,用来统一描述文件的实体BEAN,new File时给它传入文件名称或是路径,它就会去根据参数查找对应的文件属性然后封装成实体 File: java.io.File,它可以创建和删除一个文件,也可以创建和删除一个空目录 方法:file.createNewFile();创建一个新文件 file.mkdir();在当前目录下创建一个目录文件 file.mkdirs();在当前目录下,如果父目录不存在,则创建父目录,然后创建子目录 file.isFile()和file.isDirectory()常用来判断一个目录或者文件是否存在
知识点二:File file.isFile()和file.isDirectory()常用来判断一个目录或者文件是否存在 file.delete();删除一个文件或者目录 file.list();得到此抽象路径下的所有目录中的文件和目录的名称,并将其放在一个String的数组中, 注: File 不能够得到文件中的内容!!!
举例一: File file=new File(“test.txt”);//创建一个File 对象,此时磁盘上还没有test.txt文件,默认在项目文件夹下,通过 file.createNewFile(); //该方法用来在磁盘上创建文件,名为test.txt 举例二: File file=new File(“视频”); file.mkdir();//此时将会在当前目录下创建一个“视频”的文件夹 举例三: File file=new File(“D:/视频”); file.mkdir();//此时将会在D盘目录下创建一个“视频”的文件夹 举例四: File file=new File(“D:/视频/音乐”); file.mkdir();//如果你的D盘下没有“视频”文件夹,则音乐文件夹将不能被创建,怎么办,则使用 file.mkdirs();
举例五:在C盘下创建一个“哈哈”文件夹,如果已经存在该文件夹,则删除它,否则创建它举例五:在C盘下创建一个“哈哈”文件夹,如果已经存在该文件夹,则删除它,否则创建它 File file=new File("c:/哈哈"); if(file.isDirectory()){ file.delete(); }else{ file.mkdir(); } 举例六:获取“哈哈”文件下的所有文件 File file=new File("c:/哈哈"); String[] home=file.list(); for(int i=0;i<home.length;i++){ System.out.println(home[i]); }
知识点三:输入/输出流 既然File不能得到文件的具体内容,那么该如何得到文件的内容呢?引入输入/输出流来解决 在Java的中,流分为两大类:字节流和字符流 (1)字节流:有两个顶层的抽象类 :InputStream(输入流)和OutputStream(输出流), 由于他们都是抽象类,抽象类不能实例化,它俩对应的子类常用的是:FileInputstream和FileOutputStream 举例:使用字节流实现文件内容的拷贝(使用已经存在的节点流来构造,提供带缓冲的读写,提高读写的效率):
public static void main(String[] args) throws IOException { FileInputStream fis=new FileInputStream("C:/我的手机谷歌账户.txt");//获取源文件 BufferedInputStream bis=new BufferedInputStream(fis);//进入过滤流:即字节缓冲流,读取资源的效率高 FileOutputStream fos=new FileOutputStream("D:/新建 文本文档.txt");//放入目标文件中 BufferedOutputStream bos=new BufferedOutputStream(fos);//进入过滤流:即字节缓冲流 byte[] b=newbyte[1024];//作为缓冲区,大小为1K intlen;//保存读到的实际字节数 while((len=bis.read(b))!=-1){ bos.write(b, 0, len);//第一个参数:即得到缓冲区数组,第二个:从第几个开始,第三个:读取的长度 bos.flush();//清空缓冲区,一定要写 } }
(2)字符流:为什么要引出字符流? 原因:字节流是由字节组成的,字符流是由字符组成的,一个字符占两个字节。扩展:字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化 我们知道,在计算机中存放的就是一堆二进制,那它是如何来表示一个字符,数字,字母等?这就要靠编解码了,字符流就可以用来解决字符编码的问题,使用它,可以保证解码统一,防止出现乱码。 比如字符 ’A’,采用 ASCII码标准码为 0x41 仍然有两个顶层的抽象类 :Reader(字符输入流) 和 Writer(字符输出流)
图例:字符输入流
图例:字符输出流
举例: //往rrr.txt记事本中写入字符 BufferedWriter bufw = new BufferedWriter(new FileWriter("C:/rrr.txt")); bufw.write("abcde"); bufw.newLine(); bufw.write("fg"); bufw.flush(); bufw.close(); //从rrr.txt中读取字符 BufferedReader bufr = new BufferedReader(new FileReader("C:/rrr.txt")); String line = null; while( null != ( line = bufr.readLine()) ) { System.out.println("read line:" + line); } bufr.close();