一、File 类

先看一下File 类的定义

[java] view plaincopy
  1. public class File extends Object implements Serizliable Comparable<File>

从定义看,File类是Object的直接子类,同时它继承了Comparable接口可以进行数组的排序。

File类的操作包括文件的创建、删除、重命名、得到路径、创建时间等,以下是文件操作常用的函数。

File类的操作:

1、创建文件,注意File.separator可以解决跨操作系统的问题。

下面的例子是一创建一个文件,如果该文件存在则删除,否则创建该文件。

[java] view plaincopy
  1. package cn.com.qiang.FiloDemo;
  2. import java.io.File;
  3. import java.io.IOException;
  4. public class FileDemo2 {
  5. public static void main(String[] args) {
  6. File file = new File("D:\\test.txt");
  7. if(file.exists()){
  8. file.delete();
  9. }else{
  10. try{
  11. file.createNewFile();
  12. }catch (IOException e){
  13. e.printStackTrace();
  14. }
  15. }
  16. }
  17. }

2、文件的类型函数

file.isFile(); //判断是不是文件

file.isDirectory();//判断是不是目录

3、列出目录的内容

pulbic String[] list();//列出所有文件名和目录名

public File[] listFiles();//列出所有文件和目录

二、IO 流

与 C 一样,Java 也有流这个概念,下面先回忆一下什么是流

1、什么是流

 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。

一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。

流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。

实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。

形象的比喻——水流 ,文件======程序 ,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出.便于理解,这么定义流: 流就是一个管道里面有流水,这个管道连接了文件和程序。

2、流的分类

1)、Java.io包中的类对应两类流,一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流(node stream),其它的流则称为过滤器(filters)。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流的原理也类似。

2)、Java的常用输入、输出流
java.io包中的stream类根据它们操作对象的类型是字符还是字节可分为两大类: 字符流和字节流。
 
•Java的字节流

InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。

•Java的字符流

Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
结合开始所说的输入/输出流 ,出现了个一小框架。

                  字节流                          字符流
输入流        InputStream                  Reader
输出流        OutputStream                Writer

下面分别对这两种流进行介绍

JAVA字节流

•FileInputStream和FileOutputStream

这两个类属于结点流,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流。如:

FileInputStream infile = new FileInputStream("myfile.dat");
FileOutputStream outfile = new FileOutputStream("results.dat");

要注意的是,构造FileInputStream, 对应的文件必须存在并且是可读的,而构造FileOutputStream时,如输出文件已存在,则必须是可覆盖的。

•BufferedInputStream和BufferedOutputStream

它们是过滤器流,其作用是提高输入输出的效率。

•DataInputStream和DataOutputStream

这两个类创建的对象分别被称为数据输入流和数据输出流。这是很有用的两个流,它们允许程序按与机器无关的风格读写Java数据。所以比较适合于网络上的数据传输。这两个流也是过滤器流,常以其它流如InputStream或OutputStream作为它们的输入或输出。

下面举个例子,实现文件的复制功能:

[java] view plaincopy
  1. package cn.com.farsight.writedemo;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.util.Date;
  8. public class InputStremdemo {
  9. public static void main(String[] args) throws IOException {
  10. FileInputStream fis = new FileInputStream("D:\\feiq.rar");
  11. FileOutputStream fos = new FileOutputStream("C:\\feiq.rar");
  12. BufferedInputStream bfis = new BufferedInputStream(fis);
  13. BufferedOutputStream bfos = new BufferedOutputStream(fos);
  14. System.out.println(new Date());
  15. int i = 0;
  16. //      byte [] buf = new byte[128];
  17. while((i = bfis.read())!=-1){
  18. bfos.write(i);
  19. }
  20. fis.close();
  21. fos.close();
  22. bfis.close();
  23. bfos.close();
  24. System.out.println(new Date());
  25. }
  26. }

执行结果如下:

[java] view plaincopy
  1. Tue Jan 26 20:24:50 CST 2016
  2. Tue Jan 26 20:24:50 CST 2016

文件只有600多K,速度还是挺快的。

Java的字符流

字符流主要是用来处理字符的。Java采用16位的Unicode来表示字符串和字符,对应的字符流按输入和输出分别称为readerwriter

•InputStreamReader和OutputStreamWriter

在构造这两个类对应的流时,它们会自动进行转换,将平台缺省的编码集编码的字节转换为Unicode字符。对英语环境,其缺省的编码集一般为ISO8859-1。

•BufferedReader和BufferedWriter

这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理。

FileReader 和FileWriter

1、FileWriter类

构造方法:

[java] view plaincopy
  1. FileWriter fw = new FileWriter(String fileName);//创建字符输出流类对象和已存在的文件相关联。文件不存在的话,并创建。
  2. 如:FileWriter fw = new FileWriter("C:\\demo.txt");

主要方法: void write(String str)   // 写入字符串。当执行完此方法后,字符数据还并没有写入到目的文件中去。此时字符数据会保存在缓冲区中。

此时在使用刷新方法就可以使数据保存到目的文件中去。

void flush()                   // 刷新该流中的缓冲。将缓冲区中的字符数据保存到目的文件中去。

void close()                  // 关闭此流。在关闭前会先刷新此流的缓冲区。在关闭后,再写入或者刷新的话,会抛IOException异常。

2、FileReader类

构造方法

[java] view plaincopy
  1. FileReader fr = new FileReader(String fileName);//使用带有指定文件的String参数的构造方法。创建该输入流对象。并关联源文件。

主要方法
int read(char []cbuf);//将字符读入数组。返回读取的字符数。如果已经到达尾部,则返回-1。

void close();              //关闭此流对象。释放与之关联的所有资源。

下面是个例子

[java] view plaincopy
  1. package cn.com.qiang.FiloDemo;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.PrintWriter;
  6. public class FiloDemo3 {
  7. public static void main(String[] args){
  8. File fin,fout;
  9. BufferedReader bf = null;
  10. PrintWriter pw = null;
  11. try{
  12. fin = new File("D:\\面向对象面向过程.txt"); //注意文件与程序都要在同一个文件夹下。zzc.txt为要被复制的文件。
  13. fout = new File("D:\\copy面向对象面向过程.txt"); //如果没有会自动创建。
  14. bf = new BufferedReader(new FileReader(fin));
  15. pw = new PrintWriter(fout); //PrintWriter为打印流,也可以使用BufferedWriter.
  16. String line = bf.readLine();
  17. while(line!=null){
  18. pw.println(line);
  19. line = bf.readLine();
  20. }
  21. }catch(Exception e){
  22. e.printStackTrace();
  23. }finally{
  24. try{
  25. //关闭 文件。
  26. if(bf!=null){
  27. bf.close();
  28. bf = null;
  29. }
  30. if(pw!=null){
  31. pw.close();
  32. pw = null;
  33. }
  34. }catch(Exception e){
  35. e.printStackTrace();
  36. }
  37. }
  38. }
  39. }

附:字节流和字符流的区别(重点)

字节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。

Java 高级—— IO 基础相关推荐

  1. Java高级 IO和XML

    一.IO流(Stream) 文件(File):数据在磁盘中以文件为单位组织的(文件本质是一堆字节数据),文件读写操作 写:主要针对文本格式的文件,对其它格式文件,主要文件读.创建.删除.复制等操作; ...

  2. java主类与源代码名称_Java高级编程基础:类文件结构解析,看穿Class代码背后的秘密...

    类文件结构 在说完了JVM内部结构后,接下来我们需要说一下另外一个非常重要的基础概念Class类结构. 我们既然知道了开发的Java源代码会首先被编译成字节码文件保存,JVM的类加载器会读取这些文件内 ...

  3. Java——IO基础

    1.Java Io流的概念,分类,类图. 1.1 Java Io流的概念     java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作.在java中把不同的输入/输出源(键盘,文件 ...

  4. java之十 高级IO流

    视频课堂:https://edu.csdn.net/course/play/8222 java.io定义的输入/输出类列于下表: ObjectInputStream.GetField和ObjectOu ...

  5. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  6. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  7. java练气期(2)----java高级(File类与IO流)

    什么是File类 即Java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等. File类常用方法 delete()删除此抽象路径名表示的文件和目录. ...

  8. 【JAVA核心知识】6.1: JAVA IO基础

    IO基础 1 输入与输出 2 流 2.1 字节流 2.2 字符流 3 阻塞IO与非阻塞IO 3.1 阻塞IO 3.2 非阻塞IO 3.3 生活举例 4 同步IO与异步IO 4.1 同步IO 4.2 异 ...

  9. (Java高级教程)第四章必备前端基础知识-第二节1:CSS概述和选择器

    文章目录 一:CSS概述 (1)概述 (2)语法规范 (3)CSS引入方式 二:选择器 (1)基础选择器 ①:标签选择器 ②:类选择器 ③:id选择器 ④:通配符选择器 总结 (2)复合选择器 ①:后 ...

最新文章

  1. R语言sqrt函数为数值开平方根实战
  2. python代码需要背吗-Python面试必须要看的15个问题
  3. 华为发布会: 牛逼鸿蒙,吹水的大会
  4. 【NLP】一份相当全面的BERT模型精讲
  5. 0220互联网新闻 | 豆瓣FM获腾讯音乐娱乐集团投资;华为云将在新加坡拓展云平台和人工智能能力...
  6. mysql字段名explain_Mysql中explain用法和结果字段的含义介绍
  7. 210317阶段三opencv
  8. 信息学奥赛一本通 1138:将字符串中的小写字母转换成大写字母 | OpenJudge NOI 1.7 13
  9. iOS平台一套完善的Crash Report解决方案
  10. balenaEtcher-1.5.70可能是最好用的镜像写U盘工具 img to usb dmg to usb支持多种格式内附截图介绍多平台均有
  11. Linux环境关闭开机自启动服务
  12. numpy随机抽样及各种分布函数详解
  13. 怎么将两个PDF合并成一个?这里有三个小妙招分享给你
  14. ITIL学习(四) 服务、IT服务、服务台管理、IT服务管理
  15. 机器学习案例-信用卡诈骗识别。
  16. 移动互联网创业团队开发管理经验
  17. android 生物识别_将生物识别提示与cryptoobject一起使用
  18. 牛客网-腾讯编程校招真题 编码 Java
  19. 微博中如何选中#话题#
  20. 拖拽即可创建HTML5网站的建站平台

热门文章

  1. 清除Linux终端命令的历史记录
  2. 爱慕内衣信息化颠覆流程重构供应链
  3. Session莫名丢失的原因及解决办法[转载]
  4. SQL View 的使用语法与原则
  5. 使用协同过滤推荐电影
  6. Pytorch框架中SGD&Adam优化器以及BP反向传播入门思想及实现
  7. leetcode1482. 制作 m 束花所需的最少天数(二分法)
  8. leetcode392. 判断子序列(动态规划)
  9. 递归javascript_使用freeCodeCamp挑战解释了JavaScript中的递归
  10. 工厂模式-依赖倒置原则