结合IO流 找出特定类型文件并复制到指定目录

一、
有这样的一个words数组,数组中每个字符串的格式为“词性:单词”
String[] words = {“verb:eat”,“verb:drink”,“verb:sleep”,“verb:play”,“noun:rice”,“noun:meat”,“noun:hand”,“noun:hair”};
根据单词性质动词verb全部存入verb.txt文件中
根据单词性质名词noun全部存入noun.txt文件中

package com.homework.homework0729;

import java.io.*;

/**
 * @Author jinman1012@qq.com   2020/7/29 15:46
 * @Version 1.0
 */
public class Problem1 {
    public static void main(String[] args) throws IOException {
        String name1 = "verb.txt";
        String name2 = "noun.txt";
        String temp = "";
        StringBuffer sb1 = new StringBuffer();
        StringBuffer sb2 = new StringBuffer();
        String[] words = {"verb:eat","verb:drink","verb:sleep",
                "verb:play","noun:rice","noun:meat","noun:hand","noun:hair"};
        //将words数组分为verb数组和noun数组
        for (int i = 0; i < words.length; i++) {
            if(words[i].startsWith("verb")) {
                temp = words[i];
                temp = temp.substring(temp.indexOf(":")+1);
                sb1.append(temp + ",");
            }
            if(words[i].startsWith("noun")) {
                temp = words[i];
                temp = temp.substring(temp.indexOf(":")+1);
                sb2.append(temp + ",");
            }
        }
        if(sb1.length() > 1) sb1.deleteCharAt(sb1.length()-1);
        if(sb2.length() > 1) sb2.deleteCharAt(sb2.length()-1);
        String words1 = sb1.toString();
        String words2 = sb2.toString();
        System.out.println(words1);
        System.out.println(words2);
        //然后通过调用writeWord方法将其写入对应的文件中
        writeWord(words1.getBytes(),name1);
        writeWord(words2.getBytes(),name2);
    }
    public static void writeWord(byte[] strByte ,String fileName) throws IOException {
        File file = new File(fileName);
        OutputStream out = new FileOutputStream(file,true);
        out.write(strByte);
        out.close();
    }
}

二、
递归查找指定目录中(包括子目录中),所有的.java文件,
并且,把所有这些找到的java文件,复制到一个指定的目录下
目录结构同昨天,递归删除那道题的firstLevel

package com.homework.homework0729;

import java.io.*;
import java.util.ArrayList;

/**
 * @Author jinman1012@qq.com   2020/7/29 15:46
 * @Version 1.0
 */
public class Problem2 {
    //设置全局目录
    static ArrayList<File> result = new ArrayList<>();
    static MyFileFilter myFileFilter = new MyFileFilter();
    public static void main(String[] args) throws IOException {
        String pathName = "D:\\test";
        String distinctName = "D:\\test2";
        File file = new File(pathName);
        File copyDistinct = new File(distinctName);
        //找文件
        findJava(file);
        //复制文件
        copyJava(copyDistinct);
    }
    //第一步:遍历目录,找到并返回所有.java结尾的文件的绝对路径的字符串数组
    public static void findJava(File pathName){
        File[] fileNames = pathName.listFiles();
        //null表示pathName是目录
        if(fileNames == null || fileNames.length == 0) {
            if(pathName.isFile() && myFileFilter.accept(pathName)){
                result.add(pathName);
            }
            return;
        }
        //递归
        for (int i = 0; i < fileNames.length; i++) {
            findJava(fileNames[i]);
        }
    }
    //第二步:使用IO流进行copy
    public static void copyJava(File copyDistinct) throws IOException {
        File[] files = result.toArray(new File[0]);
        String distinctFilePath = "";
        for (int i = 0; i < files.length; i++) {
            System.out.println(files[i].toString());
            InputStream in = new FileInputStream(files[i]);
            //目录拼接
            //Attention   要往文件里面写入东西  而不是目录
            distinctFilePath = copyDistinct.getAbsolutePath() + "\\" + files[i].getName();
//            System.out.println(distinctFilePath);
            OutputStream out = new FileOutputStream(new File(distinctFilePath));
            int len;
            byte[] copyByte = new byte[1024];
            while((len = in.read(copyByte)) != -1) {
                //len指的是将指定 byte 数组中从偏移量 off 开始的 len 个《字节》写入此文件输出流。不是指数组下标
                out.write(copyByte,0,len);
            }
            in.close();
            out.close();
        }
    }
}
//文件名过滤器
class MyFileFilter implements FileFilter {
    @Override
    public boolean accept(File targetFile) {
//        if(targetFile.isDirectory()) return false;
        return targetFile.getName().endsWith(".java");
    }
}

错误:
Exception in thread “main” java.io.FileNotFoundException: D:\test2 (拒绝访问。)
at java.io.FileOutputStream.open0(Native Method)
在这里插入图片描述

解决:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Java 中的 ZipInputStream 类来解压缩 zip 文件,并在解压缩的过程中遍历 zip 文件中的所有文件,然后根据特定的后缀名来保存需要的文件指定目录中。 以下是一个简单的示例代码: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class ExtractZipFiles { public static void main(String[] args) { String zipFilePath = "example.zip"; // zip 文件路径 String destDirectory = "extracted"; // 解压后保存文件目录 String targetFileExtension = ".txt"; // 需要提取的文件后缀名 File destDir = new File(destDirectory); if (!destDir.exists()) { destDir.mkdir(); } byte[] buffer = new byte[1024]; try { // 创建 ZipInputStream 对象 ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath)); // 遍历 zip 文件中的所有文件 ZipEntry zipEntry; while ((zipEntry = zipInputStream.getNextEntry()) != null) { String fileName = zipEntry.getName(); // 如果文件后缀名符合要求,则将该文件解压缩并保存到指定目录中 if (fileName.endsWith(targetFileExtension)) { File newFile = new File(destDirectory + File.separator + fileName); FileOutputStream fos = new FileOutputStream(newFile); int len; while ((len = zipInputStream.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); } zipInputStream.closeEntry(); } zipInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 上面这段代码会遍历 zip 文件中的所有文件,如果文件后缀名符合要求,则将该文件解压缩并保存到指定目录中。你只需要将 `zipFilePath`、`destDirectory` 和 `targetFileExtension` 替换成你自己的值即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值