Java 文件IO的操作示例

本文详细介绍了Java中各种IO流的应用,包括字节流、字符流、缓冲流等,并展示了如何通过SequenceInputStream进行文件合并,同时介绍了管道流的使用方式及Properties类的基本操作。

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

File file = new File("");
        try {
            //字节流
            InputStream inputStream = new FileInputStream(file);
            OutputStream outputStream = new FileOutputStream(file);

            //字符流
            Writer writer = new FileWriter(file);
            Reader reader = new FileReader(file);

            //字节流转字符流
            Reader reader1 = new InputStreamReader(inputStream, Charset.defaultCharset());
            Writer writer1 = new OutputStreamWriter(outputStream, Charset.defaultCharset());

            //字节缓冲流,默认的缓存是8kb,当缓存满时,会把数据写入文件,并且缓存下标置为0,重头开始覆盖数据。
            BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
            String info = "你好";
            //这个时候其实是写入缓存,并没有写到文件
            bufferedOutputStream.write(info.getBytes());
            //关闭的时候才写入文件
            bufferedOutputStream.close();

            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            byte[] bytes = new byte[1024];
            int length = -1;
            while ((length = bufferedInputStream.read(bytes)) != -1){
                System.out.println(new String(bytes,0,length));
            }
            bufferedInputStream.close();

            //字符缓冲流,默认的缓存是8kb
            BufferedReader bufferedReader = new BufferedReader(reader);
            char[] chars = new  char[1024];
            while ((length = bufferedReader.read(chars)) != -1){
                System.out.println(new String(chars,0,length));
            }
            bufferedReader.close();

            //字节数组流,基于内存操作,维护内部的数组
            String str = "1245878555fdsfhjsSDHNc";
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(str.getBytes());
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            int curr = -1;
            while ((curr = byteArrayInputStream.read()) != -1){
                //只取字母
                if ((curr>=65 && curr<=90) || (curr>=97 && curr<=122)) {
                    byteArrayOutputStream.write(curr);
                }
            }
            System.out.println(byteArrayOutputStream.toString());

            //合并流处理,获取要合并的流文件
            InputStream in1 = new  FileInputStream(file);
            InputStream in2 = new  FileInputStream(file);
            InputStream in3 = new  FileInputStream(file);
            InputStream in4 = new  FileInputStream(file);
            Vector<InputStream> v = new Vector<InputStream>();
            v.add(in1);
            v.add(in2);
            v.add(in3);
            v.add(in4);
            Enumeration<InputStream> list = v.elements();
            //合并流处理
            SequenceInputStream sequenceInputStream = new SequenceInputStream(list);
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("ASD"));
            while ((length = sequenceInputStream.read(bytes)) != -1){
                bos.write(bytes, 0, length);
                bos.flush();
            }
            bos.close();
            sequenceInputStream.close();
            System.out.println("合并完成");

            //字符串流
            StringReader stringReader = new StringReader("hello word");
            StreamTokenizer streamTokenizer = new StreamTokenizer(stringReader);
            int totol = 0;
            while (streamTokenizer.ttype != StreamTokenizer.TT_EOF){
                if (streamTokenizer.nextToken() == StreamTokenizer.TT_WORD){
                    totol++;
                }
            }
            System.out.println("一个"+ totol + "个单词");

            //管道流
            //管道输入流应该接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。
            //通常由某个线程从PipedInputStream对此读取,并由其他线程将其写入到相应的PipedOutputStream。
            //不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。
            //管道输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。
            //如果向链接管道输出流提供数据字节的线程不再存在,则认为该管道已损坏
            PipedInputStream pipedInputStream = new PipedInputStream();
            PipedOutputStream pipedOutputStream = new PipedOutputStream();

            pipedInputStream.connect(pipedOutputStream);
            ReadThread readThread = new ReadThread(pipedInputStream);
            WriteThread writeThread = new WriteThread(pipedOutputStream);
            new  Thread(readThread).start();
            new  Thread(writeThread).start();

            //Properties文件操作
            Properties properties = new Properties();
//            InputStream inputStream1 = new FileInputStream("conger.properties");
            InputStream inputStream1 = Thread.currentThread().getContextClassLoader().getResourceAsStream("conger.properties");
                    //加载配置文件
            properties.load(inputStream1);
            //读操作
            String value = properties.getProperty("key");
            System.out.println(value);
            //写操作
            properties.put("key","内容") ;
            OutputStream outputStream1 = new FileOutputStream("conger.properties");
            properties.store(outputStream1,"备注");
            outputStream1.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    

class ReadThread implements  Runnable{
    private final PipedInputStream pipedInputStream;

    public ReadThread(PipedInputStream pipedInputStream) {
        this.pipedInputStream = pipedInputStream;
    }

    @Override
    public void run() {
        try {
            byte[] buf = new byte[1024];
            int len = pipedInputStream.read(buf);
            String s = new String(buf,0,len);
            System.out.println("读到:" + s);
            pipedInputStream.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

class WriteThread implements  Runnable{
    private final PipedOutputStream pipedOutputStream;

    public WriteThread(PipedOutputStream pipedOutputStream) {
        this.pipedOutputStream = pipedOutputStream;
    }

    @Override
    public void run() {
        try {
            pipedOutputStream.write("dffg".getBytes());
            pipedOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值