java IO 详解(一)

来源:互联网 发布:卫视直播软件哪个好 编辑:程序博客网 时间:2024/05/22 17:49

java I/O 详解

流的概念

  • 流就是由一组字节或字符组成的、有起点和终点的数据
  • 流的特点是数据的发送和获取都是沿数据序列顺序进行的,每个数据必须等待他前面的数据发送或读入后才能被读写
  • Java的输入与输出以字节流(二进制)或字符流(文本)的方式进行
    这里写图片描述

使用流的一般过程

  1. 使用流的构造方法创建流,选择是输入流或输出流
  2. 使用流提供的方法,进行读写等操作
  3. 使用完流后,用close方法关闭流

File类

File类的对象主要用来获取文件本身的一些信息,例如文件所在的目录、文件的长度、文件读写权限等,不涉及对文件的读写操作

构造方法有3个:

  • File(String filename)

    File f1 = new File(”c:\\temp”);//创建目录对象File f2 = new File(”c:\\temp\\abc.txt”); //创建文件对象

    注:linux系统和windows系统的文件路径表示方法不一样

  • File(String directoryPath, String filename)

  • File(File f, String filename)

文件类的属性

  • canRead(): 文件是否可读
  • canWrite():文件是否可写
  • delete(): 删除文件或目录
  • exists: 文件或目录是否存在
  • getName(): 获得文件或目录的名称(不包括路径)
  • isFile(): 连接的是否是文件(isDirectory()是否是目录)
  • length(): 文件的大小(byte)
  • getAbsolutePath(): 获得文件的绝对路径
  • lastModified(): 获取文件的最后修改时间
import java.io.*;class FileDemo{    public static void main( String[] args )   {        File file = new File( "test.txt" ); //step1:        if( file.exists() ){//判断是否存在            System.out.println( "文件 " + file.toString() + " 存在" );         }else {            System.out.println( "文件:" + file.toString()  + " 不存在" );         }         if( file.isFile() ) { //判断是否是文件           System.out.println( file.toString() + " 是文件" );         }else {             System.out.println(file.toString() + " 不是文件" );         }           System.out.println( "文件名:"  + file.getName());        System.out.println( "文件的绝对路径:" +                                                           file.getAbsolutePath());         System.out.println( "文件大小(单位字节):" + file.length());         File[] roots = File.listRoots();//根目录下的文件        for (int i = 0; i < roots.length; i++) {             System.out.println(roots[i]);             System.out.println();        }    }  }

运行结果:
这里写图片描述

目 录

  • mkdir(): 创建一个目录
  • listFiles(): 返回目录下的全部File文件
  • listFiles(FilenameFilter obj): 返回目录下指定类型的所有File文件

文件的创建与删除

  • createNewFile(): 创建一个文件对象

    File f = new File(“C:\\myletter”, “letter1.txt”);f. createNewFile();
  • delete(): 删除文件

    File f = new File(“C:\\myletter”, “letter1.txt”);  f.delete();

InputStream类

它是一个抽象类,作为其它输入流类的基类,定义了读取字节流的基本方法

常用方法如下:

  • int read():从输入流中读一个字节,返回0-255的整数(内容的unicode码)。如果已经到达流末尾而没有可用的字节,则返回值-1
  • int read(byte b[]):读取多个字节到数组中
  • int read(byte b[], int off, int len):从输入流中读取长度为len的数据,写入数组b中从索引off开始的位置,并返回读取到的字节数
  • void close():关闭此输入流(重要)

常用子类:

  • FileInputStream:从某个文件中获得字节
  • DataInputStream:允许应用程序以与机器无关方式从底层输入流中读取基本数据类型
  • ObjectInputStream:对对象进行反序列化
  • ByteArrayInputStream:该类包含一个内部缓冲区,缓冲区中所存储的是从流中读取的字节
  • SequenceInputStreamFilterInputStream
import java.io.*;public class ReadFile{  public static void main(String args[ ])   {  int b;      byte tom[ ]=new byte[25];      try      {     File f=new File(“test.txt");            FileInputStream in=new FileInputStream(f); //1. 创建输入流            while((b = in.read(tom, 0, 25))!=-1)      //2. 使用输入流读            {      String s = new String(tom, 0, b);                   System.out.print(s);            }                in.close();                                                   //3. 关闭输入流      }      catch(IOException e)      {  System.out.println("File read Error"+e);      }   }} 

这里写图片描述
test.txt文本内容:
这里写图片描述

运行结果:

DeepinScreenshot_select-area_20171107133052

OutputStream类

它是其它输出流类的基类,定义了将数据流写到输出设备的基本方法

主要方法如下:

  • void write(int b):将指定的字节写入此输出流
  • void write(byte[] b):将b.length个字节从byte数组写入此输出流
  • void write(byte[] b, int off, int len):将byte数组中从偏移量off开始的len个字节写入此输出流
  • void flush():刷新此输出流并强制写出所有缓冲的输出字节。该方法对任何输出流都是适用的
  • void close():关闭此输入流

OutputStream的常用子类有:

  • FileOutputStream:用于将数据写入某个文件中的输出流
  • DataOutputStream:允许应用程序将基本数据类型写入输出流中
  • ObjectOutputStream:对象的序列化
  • ByteArrayOutputStream:此类实现了一个输出流,其中的数据被写入一个byte数组,缓冲区会随着数据的不断写入而自动增长。可使用toByteArray和tostring方法获取数据
  • FilterOutputStream
public class FileCopy {//该程序完成文件复制功能      public static void main(String [] args){            FileInputStream fileInputStream = null;            FileOutputStream fileOutputStream = null;     try{              fileInputStream = new                            FileInputStream("FileCopyIn.java ");              fileOutputStream = new                            FileOutputStream("FileCopyOut.java");               int temp;              while((temp=fileInputStream.read())!=-1)               fileOutputStream.write(temp); //逐字节写入     }catch(IOException  e){ }   //自己添加内容,查看异常  finally{      try {           if(fileInputStream != null)                             fileInputStream.close();           if(fileOutputStream != null)                           fileOutputStream.close();        } catch (IOException e) { }       }   }}```javaimport java.io.*; //System.in的使用public class SaveTyping{  public static void main(String args[])   {  int b;      byte buffer[ ]=new byte[100];      try      {    System.out.println("输入一行文本,并存入磁盘:");            b = System.in.read(buffer); //保存键盘敲入的字符            FileOutputStream writefile = new                                          FileOutputStream("line.txt");            writefile.write(buffer,0,b); // 把 buffer中的内容写入到文件      }      catch(IOException e)      {  System.out.println("Error "+e);      }   }} 
原创粉丝点击