码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-08 22:30:50      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:


第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():刷新该流的缓存。

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

标签:

原文地址:http://www.cnblogs.com/tsembrace/p/4627707.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!