InputStream和OutputStream的学习

本文介绍了Java中文件操作及输入输出流的基本用法,包括如何获取文件路径、创建文件、读取文件内容并进行复制等操作。同时,文中通过具体实例展示了不同类型的流在文件读写中的应用。

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

下面是文件File的简单使用
直接上代码

/**
 * @ClassName FileTest
 * @Author 莫邪
 * @Description TODO
 * @Date Created in 23:10 2018/7/8
 * @Version 1.0
 */
import java.io.File;
import java.io.IOException;
import java.net.URL;

public class FileTest {
    public static void main(String[] args) throws IOException {

        //在tomcat中,在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin
        String projectPath = System.getProperty("user.dir");//得到工程的路径
        //获取当前类的绝对路径
        String classPath =FileTest.class.getResource("/").getPath();
        String classPath1 =FileTest.class.getResource("").getPath();

        System.out.println("工程的绝对路径:"+projectPath);
        System.out.println("当前的classpath路径:"+classPath);
        System.out.println("得到的是当前类FileTest.class文件的URI目录。不包括自己:"+classPath1);
        File file = new File("text.txt");
        //System.out.println("获取标准路径"+file.getCanonicalPath());
        System.out.println("获取绝对路径"+file.getAbsolutePath());
        if(!file.exists()){
            file.createNewFile();//判断文件是否存在,不存在,创建文件
        }
        System.out.println("文件的大小"+file.length());
        System.out.println("创建文件时的path"+file.getPath());
        System.out.println("文件的名字"+file.getName());




    }

}

运行结果
下面是关于输入输出流的简单使用
上代码解释,不罗嗦

package io.study;/**
 * @ClassName StreamTest
 * @Author 莫邪
 * @Description TODO io的基本操作
 * @Date Created in 23:28 2018/7/8
 * @Version 1.0
 */

import java.io.*;

/**
 * @ClassName StreamTest
 * @Author 莫邪
 * @Description TODO
 * @Date Created in 23:28 2018/7/8
 * @Version 1.0
 */
public class StreamTest {

    public static void main(String[] args) throws IOException {
        //使用输入流的时候必须确保文件是存在的,不然会报异常,报文件找不到的异常
        //可以在BufferedInputStream中组合使用流,这里使用BufferedInputStream的效率会比普通的InputStream高,因为BufferedInputStream
        //中有缓冲区,可以加快文件的读写,以InputStream或者是OutputStream结尾的类操作的是字节流(二进制流)
        InputStream inputStream = new BufferedInputStream(new FileInputStream(new File("in.txt")));
        //这里使用输出流的文件可以不确保文件存在,如果不存在将会自动创建
        OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(new File("out.txt")));
        //OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(new File("out.txt"),true));文件的追加操作

        //判断当前的流是否支持重复读的操作,inputStream是不可以重复读,读完一次之后处了特殊的复位操作不能
        //再重新读一遍流,默认inputstraem是不支持的,但是BufferedInputStream支持
        if (inputStream.markSupported()) {
            //标记当前流中的位置,往后的1024个字节可以支持重复读,
            // 如果多余1024个字节使用reset重置指针Dao标记的位置时会报错
            inputStream.mark(1024);
        }

        //下面进行文件的读取和复制的操作
        //创建一个存储数据的byte数组
        System.out.println("当前文件的还剩的可读的字节数大小" + inputStream.available());
        byte[] data = new byte[1024];
        //当read()返回结果为-1的时候代表文件已经读到的结尾
        //否则返回当前返回读到的字节数的大小
        int len;
        while ((len = inputStream.read(data)) != -1) {
            System.out.println("当前读到的数据长度:" + len);
            outputStream.write(data, 0, len);//确定len是为了提高效率
        }
        System.out.println("复位前当前文件的还剩的可读的字节数大小" + inputStream.available());
        inputStream.reset();//确保已经读取的数据没有超过inputStream.mark(1024)设置的值
        System.out.println("复位后当前文件的还剩的可读的字节数大小" + inputStream.available());
        while ((len = inputStream.read(data)) != -1) {
            System.out.println("当前读到的数据长度:" + len);
            outputStream.write(data, 0, len);//确定len是为了提高效率
        }

        //流使用完毕后应该将其关闭

        outputStream.flush();//养成好习惯,将数据flush到文件中,确保文件成功写入了数据
        outputStream.close();
        inputStream.close();
    }

}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值