Java中的IO流

i/o流
        流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出 。

File类
概述 
File类:是文件和目录路径名的抽象表示形式。

即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。

常用方法:
案例

File f=new File("D:\\hello.txt");
        try{
            f.createNewFile();
            f.delete();
            String fileName="D:"+File.separator+"hello";
            File f=new File(fileName);
            f.mkdir();
        }catch (Exception e) {
            e.printStackTrace();
        }
    public static void main(String[] args) {
        File file = new File("D:\\test.txt");
 
        try {
            System.out.println("创建一个新的文件:"+ file.createNewFile());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
//
//        System.out.println("判断是否是文件夹: "+ file.isDirectory());
//        System.out.println("判断是否是文件: "+ file.isFile());
//        System.out.println("判断文件是否存在:"+file.exists());
//        System.out.println("获取绝对路径:"+file.getAbsoluteFile());
//        System.out.println("获取相对路径:"+file.getPath());
//        System.out.println("获取文件名:"+file.getName());
//        System.out.println("获取文件字节长度:"+file.length());
 
//        File directory = new File("D:\\idea_test");
//        System.out.println("创建文件夹"+directory.mkdir());
 
//        File directory1 = new File("D:\\idea_test\\idea");
//        System.out.println("创建多层文件夹"+directory1.mkdirs());
 
    }

字节输入/输出流
字节流和字符流的基本操作是相同的,但是要想操作媒体流就需要用到字节流。
字节流因为操作的是字节,所以可以用来操作媒体文件。(媒体文件也是以字节存储的)
读写字节流:InputStream 输入流(读)和OutputStream 输出流(写)
//字节输入流
 

  File f=new File("aaa.txt"); //定位文件位置
  InputStream in=new FileInputStream(f); //创建字节输入流连接到文件
  byte[] b=new byte[1024]; //定义一个数组,用来存放读入的数据 byte数组的大小也可以           根据文件大小来定 (int)f.length()
  int count =0; 
  int temp=0;
  while((temp=in.read())!=(-1)){ //in.read()是逐字节读的。当读到文件末尾时候返回-1
  b[count++]=(byte)temp; //将读到的字节存储到byte数组中 
  }
  in.close(); //关闭流
  System.out.println(new String(b)); //打印读取到的字节
 
//字节输出流
 
    File f = new File("xinzhi.txt"); // 定位文件位置
  OutputStream out = new FileOutputStream(f); // 创建字节输出流连接到文件
  String str = "aaa"; 
  byte[] b = str.getBytes(); //将数据存入byte数组
  out.write(b); //写数据 
  out.close(); //关闭流

 文件复制

 //读入文件到程序
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(文件路径));
//写入数据到文件
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(文件路径));
    byte[] b = new byte[1024];
    int len = 0;
    while((len = bis.read(b)) != -1){
        bos.write(b, 0, len);
    }
    bis.close();
    bos.close();
    System.out.println("复制文件完成!");


字符输入/输出流
字符流是可以直接读写字符的IO流,字符流读取字符,就要先读取到字节数据,然后转为字符.;如果要写出字符,需要把字符转为字节再写出。
读写字节流:Reader输入流(读)和Writer 输出流(写)

//字符输入流
File f = new File("hello.txt"); // 定位文件位置
char[] ch = new char[100]; //定义一个数组,用来存放读入的数据
Reader read = new FileReader(f); //创建字符输入流连接到文件
int count = read.read(ch); //读操作
read.close(); //关闭流
System.out.println("读入的长度为:" + count);
System.out.println("内容为" + new String(ch, 0, count));
 
//字符输出流
File f=new File("hello.txt"); // 定位文件位置
Writer out =new FileWriter(f); //创建字符输出流连接到文件
String str="你好"; 
out.write(str); //写操作 
out.close(); //关闭流    

 字符缓冲输入/输出流
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。可以指定缓冲区的大小,或者接受默认的大小。

//字符缓冲输入流
File f = new File("xz.txt"); // 定位文件位置
char[] ch = new char[100]; //定义一个数组,用来存放读入的数据
Reader read = new FileReader(f); //创建字符输入流连接到文件
BufferedReader bfr=new BufferedReader(read); //创建缓冲流
int count = bfr.read(ch); //读操作
bfr.close(); //关闭缓冲流
read.close(); //关闭流
System.out.println("读入的长度为:" + count);
System.out.println("内容为" + new String(ch, 0, count));
 
 
//字符缓冲输出流
File f=new File("xz.txt"); // 定位文件位置
Writer out =new FileWriter(f); //创建字符输出流连接到文件
BufferedWriter bfw =new BufferedWriter(out); //创建缓冲流
String str="大数据"; 
bfw.write(str); //写操作 
bfw.close(); //关闭缓冲流
out.close(); //关闭流

 案例:
 

   public static void main(String[] args) {
        //字节输入流  硬盘-内存
        InputStream inputStream = null;
        BufferedInputStream bufferedInputStream = null;
        //字节输出流  内存-硬盘
        OutputStream outputStream = null;
        BufferedOutputStream bufferedOutputStream = null;
 
        try {
            inputStream = new FileInputStream("E:\\前端框架.zip");
            bufferedInputStream = new BufferedInputStream(inputStream);
            outputStream = new FileOutputStream("D:\\test\\前端框架.zip");
            bufferedOutputStream = new BufferedOutputStream(outputStream);
//            分批次复制文件
            byte[] bytes = new byte[1024 * 30];
            long l = System.currentTimeMillis();
            //从硬盘读取数据存放到数组里面
            int read = bufferedInputStream.read(bytes);
            while (read !=-1){
                //每次写入只写入读取到的数组长度,就不会造成空间浪费
                bufferedOutputStream.write(bytes,0,read);
                read = bufferedInputStream.read(bytes);
            }
//            for (int i = 0; i < bytes.length; i++) {
//                System.out.println(bytes[i]);
//            }
            //从内存写入数据到硬盘里面
            bufferedOutputStream.flush();
            long l1 = System.currentTimeMillis();
            System.out.println(l1-l);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            try {
                if (bufferedOutputStream != null)
                    bufferedOutputStream.close();
                //先来者后关 后来者先关
                if (outputStream != null)
                    outputStream.close();
                if (bufferedInputStream != null)
                    bufferedInputStream.close();
                //开了的流必须关闭
                if (inputStream != null)
                    inputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaIO流操作基本流程如下: 1. 创建流对象:通过File类或其他相关类创建输入流或输出流对象。 2. 打开流:使用输入流或输出流对象的open()方法打开流,这样就可以读取或写入数据。 3. 读取或写入数据:使用输入流或输出流对象的read()或write()方法读取或写入数据。 4. 关闭流:使用输入流或输出流对象的close()方法关闭流,释放资源。 需要注意的是,在使用IO流操作时,要遵循“先打开、后关闭”的原则,以确保数据的完整性和流的正确性。同时,在操作过程也需要进行异常处理,以避免出现不必要的错误。 ### 回答2: JavaIO流基本操作流程如下: 1. 打开文件或者建立网络连接:使用File类或者URL类打开文件或者建立网络连接。 2. 创建流对象:根据需要选择输入流(读取数据)或输出流(写入数据),并创建相应的流对象。常见的输入流有FileInputStream、BufferedReader等,常见的输出流有FileOutputStream、BufferedWriter等。 3. 读取或写入数据:使用流对象读取或写入数据。对于输入流,可以通过调用相关方法(如read()、readline()等)逐个字符或逐行读取数据;对于输出流,可以通过调用相应方法(如write()、print()等)逐个字符或逐行写入数据。 4. 关闭流:读取或写入完成后,需要关闭文件或网络连接,以释放资源。可以调用流对象的close()方法来关闭流。 需要注意的是,在处理IO流时,应该始终使用try-catch-finally块,以确保在发生异常时能够正确关闭流。可以把IO操作放在try块,catch块用于捕获异常,并在finally块关闭流。 另外,为了提高IO效率,可以考虑使用缓冲流来进行读写操作。缓冲流(BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter)可以通过缓冲区将数据从源读入到缓冲区,再从缓冲区写入到目标,提高读写的速度。 以上就是JavaIO流基本操作的流程。根据实际需要选择合适的流对象,并遵循打开、读取/写入、关闭的流程,可以实现灵活、高效的IO操作。 ### 回答3: 在JavaIO流是用于处理输入输出操作的工具。下面是JavaIO流的基本操作流程: 1. 创建流对象:通过使用Java的InputStream和OutputStream类来创建流对象。InputStream类用于读取输入流,而OutputStream类用于写入输出流。 2. 打开流:通过使用流对象对应的构造函数和方法来打开输入和输出流。根据具体情况,可以选择文件流、网络流或内存流来打开流。 3. 读取/写入数据:使用流对象提供的读取和写入方法来读取和写入数据。例如,使用InputStream的`int read()`方法来读取一个字节的数据,使用OutputStream的`void write(int b)`方法来写入一个字节的数据。 4. 关闭流:在读取或写入结束后,必须关闭流以释放相关资源。通过调用流对象的`close()`方法来关闭流。 需要注意的是,在处理异常的时候,我们需要对可能出现的`IOException`进行处理。可以使用try-catch语句块来捕获和处理异常。 流程示例: ```java import java.io.*; public class IOExample { public static void main(String[] args) { try { // 1. 创建流对象 FileInputStream fis = new FileInputStream("input.txt"); FileOutputStream fos = new FileOutputStream("output.txt"); // 2. 打开流 // 3. 读取/写入数据 int data; while ((data = fis.read()) != -1) { fos.write(data); } // 4. 关闭流 fis.close(); fos.close(); } catch(IOException e) { e.printStackTrace(); } } } ``` 上述示例,我们创建了一个用于将一个文件的内容拷贝到另一个文件的程序。首先,我们创建了一个FileInputStream对象来读取输入文件的内容,然后创建了一个FileOutputStream对象来写入输出文件。接下来,我们通过循环从输入流读取一个字节的数据,并将其写入到输出流,直到读取完所有的数据。最后,我们关闭了流对象来释放资源。 这就是JavaIO流的基本操作流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值