理一理*******IO操作(二)

本文介绍了Java中的基本IO流概念,包括字节流与字符流的区别及其父类。通过具体实例展示了如何使用FileInputStream读取文件内容及FileOutputStream写入文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    理解了流的概念,继续,java中有两种流,一种是字节流,一种是字符流。

    其中InputStream 和 OutputStream 分别是所有字节输入流和字符输出流的父类。Reader和Writer 类分别是字符输入流和字符输出流的父类。

    所有的IO操作,总的来说要进行三个大的步骤,分别是:1、建立与数据源相关的合适的数据流 2、用相应的方法进行读写操作 3、关闭流

   (每个流的方法还是要仔细看的,下面用他们的子类FileInputStream和FileOutputStream实现,是最最常用的方法)

一,用InputStream读文件(注释很清楚了)——FileInputStr.java

package javase;
import java.io.*;

/**
 * FileInputStream读取文件,如果文件不存在,则新建一个吧!
 * 两个静态方法,分别用来创建文件和从流中读取文件返回字符串,并且,这两个方法会被后面的同一个包中的类调用到
 * @author 幸运皮
 * */

public class FileInputStr {
 //创建一个文件
 public static void createFiles(File files){
  try{
   files.createNewFile();
  }catch(Exception e){
   e.printStackTrace();
  }
 }
 // 从流中读取信息,返回字符串
 public static String readFileInputStr(FileInputStream fiss){
  String s = null;
  try{
      byte[] data = new byte[1024];
      int i = 0;//当前数组的下标
      int n = fiss.read();  //read()方法是读取流中的第一个字节数据

      while(n != -1){ //判断是不是到了流的末尾
   data[i] = (byte)n;//返回值的int中只有最后一个字节是流中的有效数据,所以在获得流中的数值时要进行强制转换
   i++;
   n = fiss.read();
      }
      s = new String(data,0,i);//通过byte数组来自定一个新的String
     }catch(Exception e){
   e.printStackTrace();
  }
 return s;
 }
 
 
 public static void main(String[] args){
  
        //声明对象流
  FileInputStream fis = null;
  try{
   File file = new File("f://b.txt");
   
   if (!file.exists()){  //如果不存在,则创建一个吧
    createFiles(file);
   }
   
   fis = new FileInputStream(file); //创建流对象
   
   String s = readFileInputStr(fis);//读取数据,并将读取到的数据存储到数组中
   
   System.out.print(s);
  }catch (Exception e){
   e.printStackTrace();
  }
  finally {
   try {
    fis.close();  //关闭,要有的
   }catch(Exception e){System.out.print("zhaobudao");}
  }
 }

}
 

二,用OutputStream写文件(注释很清楚了)——FileOutputStr.java

package javase;
import java.io.*;
import java.io.File;
/**
 * @author 幸运皮
 * FileOutputStr写文件
 */
public class FileOutputStr {

 //将s字符串写入流fos
 public static void writeString(String s,FileOutputStream fos){
  try{
      byte[] b1 = s.getBytes();  //String 转换为byte数组
      fos.write(b1);
      }catch(Exception e){
   e.printStackTrace();
 }
 }

 public static void main(String[] args) {
  //要写入的字符串
  String s = new String("好家伙zi");
  //找到文件,如果文件不存在,则新建
  File file = new File("f://nihao.txt");
  if (!file.exists()){
   FileInputStr.createFiles(file);//用到了上面的静态方法
  }
  FileOutputStream fos = null;
  try{
      fos = new FileOutputStream(file,true);//为true的时候是追加,默认是覆盖
      writeString(s,fos);
  } catch (FileNotFoundException e){

  }finally{
       try{
    fos.close();
       }catch(Exception e){
     e.printStackTrace();
   }
  }

 }

}
(未完待续)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值