一、
有这样的一个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)
解决: