Java输入输出流

一、File类

  File类直接处理文件和文件系统。通过File类的方法,可以得到文件或目录的描述
信息,包括名称,所在路径,可读写性和长度等,还可以创建目录,创建文件,改变文件名、
删除文件和列出目录中的文件等。
1、构造方法:
  public File(String pathname): 表示pathname的抽象路径表现的形式 (开发中使用这种方式)
  public File(String parent,String child): 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
  public File(File parent, String child):  根据一个file对象和一个文件路径来构造File实例
  public File(URI uri): 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

import java.io.File;

public class FileDemo1 {
public static void main(String[] args) {
    File f1=new File("E:/Java/a.txt");      //public File(String pathname)
    System.out.println(f1);
    File f2=new File("E:/Java","b.txt");      //public File(String parent,String child)
    System.out.println(f2);
    File f=new File("E:/Java");
    File f3=new File(f,"c.txt");              //public File(File parent, String child)
    System.out.println(f3);
    File f4=new File("file://E:/Java/d.txt"); //public File(URI uri)
    System.out.println(f4);
}
}
显示:
E:\Java\a.txt
E:\Java\b.txt
E:\Java\c.txt
file:\E:\Java\d.txt
2、创建功能
     public boolean createNewFile():创建文件,当文件不存在的时候,创建此抽象路径下的文件
     public boolean mkdir():创建一个文件夹,如果文件夹存在,不创建
     public boolean mkdirs():创建文件夹,如果父目录不存在,会创建此目录
   删除功能
     public boolean delete() :删除文件或者文件夹(文件夹需要是空的)
import java.io.File;
import java.io.IOException;

public class FileDemo1 {
public static void main(String[] args) throws IOException {
    File f1=new File("e:/Java");
   System.out.println(f1.mkdir());
   File f2=new File(f1,"a.txt");
   System.out.println(f2.createNewFile());
   File f3=new File("e:\\aaa\\bbb\\ccc");
   System.out.println(f3.mkdirs());
   
   System.out.println(f2.delete());
   System.out.println(f1.delete());
      System.out.println(f3.delete());
}
}
显示:
true
true
true
true
true
true
 File的重命名功能:
     public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
             如果路径名一致的情况,那么只是重命名
             如果两次路径名称不一致,那么不只是重命名,并且剪切
 File的判断功能:
         public boolean isDirectory():判断是否是文件夹
         public boolean isFile() :判断是否是文件
         public boolean canRead(): 是否可读
         public boolean canWriter():是否可写
         public boolean exists()    :文件是否存在
         public boolean isHidden():是否是隐藏文件

import java.io.File;
import java.io.IOException;

public class FileDemo1 {
public static void main(String[] args) throws IOException {
    File f1=new File("e:/Java/ab.txt");
    File f2=new File("e:/Java/abc.txt");
    System.out.println(f1.renameTo(f2));
   System.out.println("是否是文件夹:"+f2.isDirectory());
   System.out.println("是否是文件:"+f2.isFile());
   System.out.println("是否可读:"+f2.canRead());
   System.out.println("是否可写:"+f2.canWrite());
   System.out.println("文件是否存在:"+f2.exists());
   System.out.println("是否是隐藏文件:"+f2.isHidden());
}
}
显示:
true
是否是文件夹:false
是否是文件:true
是否可读:true
是否可写:true
文件是否存在:true
是否是隐藏文件:false
 File类的获取功能:
         public String getAbsolutePath():获取抽象文件的绝对路径
         public String getPath():获取相对路径的字符串
         public String getName():返回由此抽象路径名表示的文件或目录的名称
         public long length():返回文件的长度。
         public long lastModified():文件最后一次被修改的时间(时间毫秒值)
import java.io.File;
import java.io.IOException;

public class FileDemo2 {
public static void main(String[] args) throws IOException {
    File f=new File("abc.txt");
    f.createNewFile();
    System.out.println("绝对路径:"+f.getAbsolutePath());
    System.out.println("相对路径:"+f.getPath());
    System.out.println("文件名:"+f.getName());
    System.out.println("文件长度:"+f.length());
    System.out.println("上次修改的时间(毫秒值)"+f.lastModified());
}
}
显示:
绝对路径:G:\workspace\IOliu\abc.txt
相对路径:abc.txt
文件名:abc.txt
文件长度:13
上次修改的时间(毫秒值)1526543442190
 File的高级功能
      public String[] list() :获取当前某个路径下的所有的文件夹以及文件名称的字符串数组
      public File[] listFiles() :获取当前某个路径下所有的文件夹以及文件的File数组
import java.io.File;

public class FileDemo3 {
public static void main(String[] args) {
    File f=new File("e:/Java");
    String[] s=f.list();
    File[] fs=f.listFiles();
    for(String a:s) {
        System.out.println(a);
    }
    System.out.println("------------------------------------------------");
    for(File b:fs) {
        System.out.println(b);
    }
        
}
}
显示:
abc.txt
dc
FileDemo.java
FileTest2.java
FileTest3.java
mm.jpg
sdf.txt
高圆圆.jpg
------------------------------------------------
e:\Java\abc.txt
e:\Java\dc
e:\Java\FileDemo.java
e:\Java\FileTest2.java
e:\Java\FileTest3.java
e:\Java\mm.jpg
e:\Java\sdf.txt
e:\Java\高圆圆.jpg
判断Java目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
方式1:
import java.io.File;

public class FileTest {
    public static void main(String[] args) {
        //封装e盘根目录
        File file = new File("e:\\Java") ;
        
        //获取当前盘下所有的文件夹以及文件的File数组
        File[] fileArray = file.listFiles() ;
        //非空判断
        if(fileArray!=null) {
            //遍历
            for(File f :fileArray) {
                //将每一个表示的文件/文件夹对象遍历出来
                //判断是否是文件
                if(f.isFile()) {
                    //满足文件
                    //并且以.jpg结尾的
                    if(f.getName().endsWith(".jpg")) {
                        //满足就输出
                        System.out.println(f.getName());
                    }
                }
            }
        }
    }
}
显示:
mm.jpg
高圆圆.jpg
方式2:
  public String[] list(FilenameFilter filter)
  public File[] listFiles(FilenameFilter filter)
  FilenameFiler定义了一个accept()方法,实现接口FilenameFiler时会调用accept()方法检查该文件名是否符合accept()方法指定的名字要求。
import java.io.File;
import java.io.FilenameFilter;

public class FileTest2 {
public static void main(String[] args) {
    File f=new File("e:/Java");
    String[] ss=f.list(new FilenameFilter() {
        
        @Override
        public boolean accept(File dir, String name) {
            
            return new File(dir,name).isFile()&&name.endsWith(".jpg");
        }
    });
    for(String s:ss) {
        System.out.println(s);
    }
    File[] ff=f.listFiles(new FilenameFilter() {
        
        @Override
        public boolean accept(File dir, String name) {
            return new File(dir,name).isFile()&&name.endsWith(".jpg");
        }
    });
    for(File x:ff) {
        System.out.println(x);
    }
}
}
显示:
mm.jpg
高圆圆.jpg
e:\Java\mm.jpg
e:\Java\高圆圆.jpg

二、I/O流

  IO:在设备和设备之间的一种数据传输!程序的运行结果一般输出到控制台,这是一种临时输出措施,运算结果无法长期保存,Java提供了输入输出流的功能可以把结果保存到文件中。
     IO流的分类:
          按流的方向分:
              输入流: 读取文件   (e:\\a.txt):从硬盘上文件读取出来后输出这个文件的内容
              输出流: 写文件:将e:\\a.txt 内容读出来--->写到f盘下
          按数据的类型划分:
              字节流
                  字节输入流:InputStream    :读字节
                  字节输出流:OutputStream    :写字节
              字符流    
                  字符输入流:Reader    :读字符
                    字符输出流:Writer    :写字符
 
      开发步骤:
          1)创建字节输出流对象
          2)写数据
          3)关闭资源

三、字节流

  字节流在顶层有两个抽象类:InputStream和OutputStream,定义了所有字节流的关键方法。最重要的两种方法是read()和write(),他们分别用于读入和写出字节。
  1、FileInputStream
     FileInputStream用于顺序读取本地文件,从超类继承read()和close()等方法。
  构造方法:
  FileInputStream(String filepath):使用文件名构造输入流
  例:FileInputStream f1=new FileInputStream("abc.java");
  FileInputStream (File fileObj) :使用File对象构造输入流
  例:File f=new File("abc.java");
     FileInputStream f2=new FileInputStream(f);
  读取方法:
  public int read():读取一个数据字节
  public int read(byte[] b):将最多b.length个字节数据读取到字节数组b中
  public int read(byte[] b,int off,int len):读取len个字节从off位置开始存储
 这些方法在读取数据时,遇输入流结束则返回-1;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
        //创建一个读取流对象
    FileInputStream f1=new FileInputStream("abc.txt");
    int a=f1.read();
    System.out.println(a);
    int b=f1.read();
    System.out.println(b);
    byte[] b1=new byte[10];
    int c=f1.read(b1);
    for(byte s:b1) {
        System.out.print(s+" ");
    }
    System.out.println();
    int d=f1.read(b1, 4, 4);
    for(byte s:b1) {
        System.out.print(s+" ");
    }
        //关闭流
        f1.close();
}
}
显示:
97
98
99 100 101 102 103 104 105 106 107 108
99 100 101 102 109 110 111 112 107 108
 2、FileOutputStream
    FileOutputStream用于像一个文件写数据。从超类继承write()和close()等方法。
  构造方法:
  FlieOutputStream(String filepath):使用文件名构造输出流
  FlieOutputStream(File fileObj):使用File对象构造输出流

  FlieOutputStream(String filepath,boolean append)  指定为true,末尾追加数据
  FlieOutputStream(File fileObj,boolean append)
  写出方法:
   public void write(int b):一次写一个字节
   public void write(byte[] b) :一次写一个字节数组
   public void write(byte[] b, int off,int len):一次写一部分字节数组
 
 
 import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
    FileOutputStream f=new FileOutputStream("aaa.txt");
     byte[] b= {49,50,51,52,53,54,55};
     byte[] c= {99,98,97,96,95};
    f.write(67);
    f.write(b);
    f.write(c, 0, 3);
    f.close();
}
}
 文件复制
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class ReadandWrite {
public static void main(String[] args) throws IOException {
    FileInputStream a=new FileInputStream("vb.txt");
    FileOutputStream b=new FileOutputStream("vc.txt");
    int by=0;
    while( (by=a.read())!=-1) {//一个字节一个字节的读
        b.write(by);
    }
    //写一个数组
    int n=a.available();//获取文件内容的长度
    byte [] x=new byte[n];
    a.read(x);
    b.write(x);
    //一部分一部分读写
    int count=0;
    while((count=a.read(x,0,n))!=-1) {
        b.write(x, 0, count);
    }
    a.close();
    b.close();
}
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值