java IO 详解(一)

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) { }
       }
   }
}

```java
import 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);
      }
   }
} 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值