《Java从入门到精通》第十二章学习笔记

第12章  输入和输出

一、流概述

流是指一组有序的数据序列,数据源和输出目标可以是文件,网络,压缩包或其他。

二、输入/输出流

所有输入流都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;所有输出流都是抽象类OutputStream(字节输出流)和抽象类Writer(字符输出流)的子类。

1、输入流

InputStream是所有字节输入流的父类,该类主要方法如下,方法出现错误时候会引发IOException异常。

(1)read():从输入流中读取数据的下一个字节,返回0~255之间的int字节值,如果已到末尾,返回-1.

(2)read(byte[] b):从输入流中读入一定长度的字节,并以整数形式返回字节数。

(3)close():关闭此输入流并释放与该数据流关联的所有系统资源。

Java中的字符是Unicode编码,为双字节,而InputStream类处理的是字节流,一般在Java中用Reader类处理字符文本。

2、输出流

OutputStream是所有字节输出流的父类,主要方法如下:

(1)write(int b):将指定的字节写入此输出流。

(2)write(byte[] b):将b.length个字节从指定的byte数组写入流

(3)close():关闭输出流。

三、File类

1、文件的创建与删除

(1)File(String pathname):参数作为路径名创建一个新File实例。

(2)File(String parent,String child):参数分别作为父路径和子路径,创建一个新File实例。

(3)File(File f,String child):f作为父路径对象,child作为子路径字符串。

 1 //项目中创建FileTest类,判断D盘的mywork文件夹是否存在work.txt
 2 //如果存在则删除,如果不存在则创建
 3 import java.io.File;
 4 public class FileTest {
 5
 6     public static void main(String[] args) {
 7         File file=new File("D:/myword","test.txt");//创建文件对象
 8         if(file.exists()){
 9             file.delete();
10             System.out.println("文件已删除");
11         }else{
12             try{
13                 file.createNewFile();
14                 System.out.println("文件已创建");
15             }catch (Exception e){
16                 e.printStackTrace();
17             }
18         }
19     }
20 }

2、获取文件信息

File类获取文件本身信息的方法主要包括:

(1)getName():获取文件的名称。

(2)canRead():判断文件是否可读

(3)canWrite():判断文件是否可写入

(4)exists():判断文件是否存在

(5)length():获取文件以字节为单位的长度

(6)getAbsolutePath():获取文件的绝对路径

(7)getParent():获取文件的父路径

(8)isFile():判断文件是否存在(判断对象是否是一个文件?)

(9)isDirectory():判断对象是否是一个目录

(10)isHidden():判断对象是否是隐藏文件

(11)lastMOdified():获取文件最后修改时间

import java.io.File;
public class FileTest {

    public static void main(String[] args) {
        File file=new File("D:/myword","test.txt");//创建文件对象
        if(file.exists()){
            String name=file.getName();  //获取文件名称
            long length=file.length();    //获取文件长度
            boolean hidden=file.isHidden();  //判断文件是否隐藏
            System.out.println("文件名称为:"+name);
            System.out.println("文件长度为:"+length);
            System.out.println("文件是隐藏文件吗?"+hidden);
        }else{
            System.out.println("文件不存在!");
        }   }
}
//通过renameTo()重命名文件
import java.io.File;
public class FileTest {

    public static void main(String[] args) {
        File file=new File("D:/myword","test.txt");//创建文件对象

        if(file.exists()){
            System.out.println("文件名称为:"+file.getName());//获取文件名称
            System.out.println("文件长度为:"+file.length());//获取文件长度
            System.out.println("文件是隐藏文件吗?"+file.isHidden());//判断文件是否隐藏
        }else{
            System.out.println("文件不存在!");
        }
        File file1=new File("D:/myword","testhaha.txt");
        if(file1.exists()){
            System.out.println("已存在"+file1.getName()+"文件,无法重命名!!");
        }else{
            file.renameTo(file1);
            System.out.println(file.getName()+"文件名称已修改为"+file1.getName());
        }
    }
}

四、文件输入、输出流

1、如果需要将数据永久保存,可使用FileInputStream和FileOutputStream类与文件建立连接,将需要的数据永久保存到文件里。

FileInputStream是InputStream抽象类的实现类,FileOutputStream是OutputStream抽象类的实现类。

 1 //使用FileOutputStream类向文件work写入信息
 2 //然后通过FileinputStream类将work文件中的数据读取到控制台中
 3 import java.io.*;
 4 public class FileTest {
 5     public static void main(String[] args){
 6         File file=new File("F:\\...\\STUDY\\lab\\java","work.txt");        //创建文件对象
 7         try{
 8             FileOutputStream out=new FileOutputStream(file);  //创建FileOutputStream对象
 9             byte bx[]=" tslvcj ".getBytes();            //创建字节型数组
10             out.write(bx);                //将数组中信息写入文件
11             out.close();                //关闭输出流
12         }catch(Exception e){
13             e.printStackTrace();
14         }
15         try{
16             FileInputStream in=new FileInputStream(file);
17             byte by[]=new byte[1024];
18             int len=in.read(by);    //将文件中字节流数据读取入数组
19             System.out.println("文件中信息是:"+new String(by,0,len));
20             in.close();
21         }catch(Exception e){
22             e.printStackTrace();
23         }
24
25     }
26
27 }

2、FileInputStream和FileOutputStream是针对字节流文件的类,如果对于非单字节编码的文件,可能会出现乱码,一般对字符流文件采用FileReader和FileWriter类。

 1 import java.io.*;
 2 public class FileRwTest {
 3
 4     public static void main(String[] args) {
 5         File file=new File("F:\\霜\\STUDY\\lab\\java","work.txt");
 6         try{
 7             FileWriter fwr=new FileWriter(file);
 8             fwr.write("ilc!");
 9             fwr.close();
10         }catch(Exception e){
11             e.printStackTrace();
12         }
13         try{
14             FileReader fr=new FileReader(file);
15             char mystr[]=new char[1024];
16             int len=fr.read(mystr);
17             System.out.println("文件中信息为:"+new String(mystr,0,len));
18             fr.close();
19         }catch(Exception e){
20             e.printStackTrace();
21         }
22         System.out.println("文件名称为:"+file.getName());
23         System.out.println("文件长度为:"+file.length()+"Bytes");
24         System.out.println("文件是否隐藏:"+file.isHidden());
25     }
26 }
 1 import java.io.*;
 2 public class FileTest {
 3     //显示某一文件类下所有文件的名称
 4     public void showFileName(File file){
 5         if(!file.exists()){
 6             System.out.println("文件不存在!");
 7         }else{
 8             if(file.isFile()){
 9                 System.out.println(file.getName());
10             }else{
11                 File[] fd=file.listFiles();
12                 for(File fx:fd){
13                     showFileName(fx);
14                 }
15             }
16         }
17     }
18     public static void main(String[] args){
19         FileTest ft=new FileTest();
20         File file=new File("E:\\lab");
21         ft.showFileName(file);
22     }
23 }
 1 //删除指定文件或文件夹
 2 import java.io.*;
 3 public class DelFile {
 4     public void delF(File file){
 5         if(!file.exists()){
 6             System.out.println("文件不存在!");
 7         }else{
 8             if(file.isFile()){
 9                 System.out.println("文件"+file.getName()+"已删除!");
10                 file.delete();
11             }else{
12                 File[] fa=file.listFiles();
13                 for(File fx:fa){
14                     delF(fx);
15                 }
16
17             }
18         }
19     }
20     public static void main(String[] args){
21         DelFile delTest=new DelFile();
22         File file=new File("E:\\lab");
23         delTest.delF(file);
24     }
25 }

五、带缓存的输入、输出流
1、BufferedInputStream类可以对任意InputStream类进行带缓存区的包装以达到性能优化,有两种构造函数:

(1)BufferedInputStream(InputStream in):创建了32个字节的缓存流;

(2)BufferedInputStream(InputStream in,int size):按指定大小创建缓存流。

2、BufferedOutputStream类输出信息和向OutputStream类输入信息完全一样,只不过BufferedOutputStream通过flush()方法强制将缓存区的数据输出结束。其有两种构造方法:

(1)BufferedOutputStream(OutputStream in):创建一个32个字节的缓存区;

(2)BufferedOutputStream(OutputStream in,int size):按指定大小创建缓存流。

3、BufferedReader类与BufferedWriter类分别继承Reader类和Writer类

*BufferedReader类常用方法如下:

(1)read():读取单个字符;

(2)readLine():读取一个文本行,并将其返回为字符串;若无数据,返回null;

(3)writ(String s,int off,int len):写入字符串的某一部分;

(4)flush():刷新该流的缓存。

时间: 2024-10-20 06:23:39

《Java从入门到精通》第十二章学习笔记的相关文章

《Java从入门到精通》第七章学习笔记

第7章 类和对象 一.类和对象的定义及关系 1.类是同一类别对象的抽象定义:可以理解为是某一类具体对象的模子,确定对象将会拥有的特性,包括该类对象具备的属性和方法. 2.对象是对类的一种具体化的客观存在,是对类的具体实例化.要创建一个对象,必须基于类,即先要创建可描述该对象的类. 3.创建一个类 1 public class Telphone { 2 //属性(成员变量):有什么 3 float screen; 4 float cpu; 5 float mem; 6 //方法 :干什么 7 vo

《Java从入门到精通》第四章学习笔记

第4章 流程控制 一.条件语句 1.if语句 1 if(布尔表达式){ 2 语句序列 3 } 4 /* 5 布尔表达式如果为true则执行if代码块中的语句序列: 6 反之则不执行. 7 */ 2.if…else语句 1 if(布尔表达式){ 2 语句序列 3 } 4 else{ 5 语句序列 6 } 7 /* 8 布尔表达式如果为true则执行if代码块中的语句序列: 9 反之则执行else代码块中的语句序列. 10 如果一段代码中有多处if..else,则每一个else总是与它上面最近的一个

《Java从入门到精通》第三章学习笔记

第3章 Java语言基础 一.标识符和关键字 1.Java中的标识符用于标识类名.变量名.方法名.数组名.文件名. 2.标识符的命名规则:由字母.数字.下划线和美元符号组成,但第一个字符不能是数字.同时标识符不能选用Java的关键字和保留字. 3.一般的约定命名规则: (1)类和接口名:每个词首字母大写,如MyClass,HelloWorld: (2)方法名:第一个词的首字母小写,其余词首字母大写,尽量少用下划线,如myMethod,myGetData: (3)常量名:基本数据类型的常量名全部用

《Java从入门到精通》第五章学习笔记

第5章 数组 一.一维数组 1.创建 一维数组实质上是一组相同类型数据的集合,在Java中数组不属于数据类型,而是一种对象. 数组的两种声明方式: int[] arr1;int arr2[]; 数组声明之后,在使用之前还需要先分配内存空间: arr1=new int[3];  //数组元素个数为3,即长度为3:arr2=new int[2]; 声明和分配空间也可以一并操作: int arr1[]=new int[3];int arr2[]=new int[2]; 元素赋值的两种方法: arr1[

《Java从入门到精通》第十三章学习笔记

第十三章 Swing程序设计 一.Swing概述 Swing是GUI(图形用户界面Graphic User Interface)开发工具包,在AWT(抽象窗口工具 Abstract Windows Tool)的基础上使开发跨平台的Java应用程序界面成为可能.使用Swing开发的Java程序,其界面是不受本地系统平台限制的. 二.Swing常用窗体 1.JFrame框架窗体 JFrame窗体是一个容器,它是Swing程序中各个组建的载体,可以通过继承java,swing.JFrame类创建一个窗

《Java从入门到精通》第十一章学习笔记

第11章 异常处理 一.异常的分类 1.可控式异常: (1)IOException:当发送某种I/O的异常: (2)SQLException:关于数据库访问或其他错误的异常 (3)ClassNotFoundException:类没有找到的异常 (4)NoSuchFieldException:类不包含指定名称的字段时的异常 (5)NoSuchMethodException:无法找到某一方法时候的异常 1 public class Ex1 { 2 3 private int num=10; 4 pu

Java 第十二章 继承 笔记

Java 第十二章  继承 笔记 一.使用继承:     1)方便修改代码     2)减少代码量 二.super 继承object 类:super 访问父类的无参构造:super 指的是object 的无参构造.     例:子类调用父类:super.属性 / super.方法    注意:子类不能继承父类私有属性:得用set.get方法来调用:    super只能写在代码块的第一句:super只能调用非私有的方法:    super只能出现在子类的方法和构造方法中. 三.不能被继承的父类成

D3.js的v5版本入门教程(第十二章)—— D3.js中各种精美的图形

D3.js的v5版本入门教程(第十二章) D3中提供了各种制作常见图形的函数,在d3的v3版本中叫布局,通过d3.layout.xxx,来新建,但是到了v5,新建一个d3中基本的图形的方式变了(我也并不知道是不是还叫布局,我觉得也可以这么叫,反正布局指的也是一个绘图函数) 下面是d3中一些常见的部分图形 bubble —— 泡泡图 packing —— 打包图 bundling —— 捆图 force —— 力导向图 chord —— 弦图 pie——饼状图 tree——树状图 中国地图 我们利

《Linux内核设计与实现》第一、二章学习笔记

<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统 1.主要发展过程   1969年,贝尔实验室的程序员们设计了一个文件系统原型,最终发展演化成了Unix 1971年,Unix被移植到PDP-11型机中 1973年,整个Unix系统使用C语言进行重写,为后来Unix系统的广泛移植铺平了道路 Unix第六版(V6)被贝尔实