FileInputStream与FileOutputStream字节流的读取和写入

导包

import java.io.*;

文件的创建

exists()方法用来判断文件存不存在并返回一个Boolean类型的值
createNewFile();创建一个文件,文件路径如果不存在则返回false,可以和midir()创建文件夹搭配使用

//文件的创建
public void fileCreate(String filepath) {
 File file =new File(filepath);
 System.out.println(file.exists());
 if(file.exists()) {
  System.out.println("文件已存在");
 }else {
  try {
   //file.getParentFile().mkdir();
   file.createNewFile();//创建文件
   System.out.println("文件创建成功!\n文件路径:"+file.getPath()+"\n文件名:"+file.getName());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }
}

文件的写入

实例化FuleOutputStream的对象时可以指定true参数,这样原本存在与文件中的数据就不会被覆盖

//文件写入
public void writeFile(String filepath,String text) {
 File file =new File(filepath);//传入一个文件路径给对象file
 FileOutputStream write=null;
 try {
  if(!file.exists()) {
   
  file.createNewFile();//创建文件,路径不存在返回false
  //file.mkdir();  //创建文件夹 
  }else {
   System.out.println("文件已创建!");
  }
  
  write=new FileOutputStream(file,true);//指明true参数在写入数据时不覆盖原有数据
  write.write(text.getBytes("utf-8"));//将字符串转换为编码为utf—8字节数组Byte[] byte=text.getBytes("utf-8"),write.write(byte);
  write.write("\n".getBytes());//实现换行
  
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }finally {
   try {
    if(write!=null) {
      write.flush();//关闭缓冲区
      write.close();//关闭流对象
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
 }
 
}

文件的读取

public void readFile(String filepath) {
 File file =new File(filepath);
 FileInputStream read=null;
 int length=0;
 if(file.exists()) {
  try {
   
   read=new FileInputStream(file);
   byte[] buf = new byte[1024];  //定义一个字节数组
   while((length=read.read(buf)) != -1){
    
       System.out.println(new String(buf,0,length,"utf-8"));//将数组解析成字符串,指定编码格式防止乱码
       
   }
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally {
   if(read!=null) {
    try {
     read.close();//关闭流
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
 }else {
  System.out.println("文件不存在");
 }
 
}

字符流(FileWriter,FileReader)与字节流的区别

  1. 字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。
    所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
  2. 所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
  3. 字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

你可能感兴趣的:(笔记)