1.有这样的一个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文件中.
import java.io.*;
public class day1901 {
public static void main(String[] args) {
//创建数组对象
String[] words = {"verb:eat", "verb:drink", "verb:sleep", "verb:play",
"noun:rice", "noun:meat", "noun:hand", "noun:hair"};
//创建字符串用于将动词名词分开
String verb = "verb";
String noun = "noun";
//将所有的动词和名词分别拼接到verbs和nouns两个字符串中,然后将字符串分别写入两个txt文件中
String verbs = "";
String nouns = "";
for (String word : words) {
//这个格式是foreach的形式,表示取出数组v中的每一个元素,
// 就是循环一次就依次取出一个元素赋值给s,直到取完为止.
if (word.contains(verb)) {
//包含verb则存入字符串verbs换行
verbs += word;
verbs += "/n";
}
if (word.contains(noun)) {
//包含noum则存入字符串nouns换行
nouns += word;
nouns += "/n";
}
}
//在指定目录创建存入动名词的txt
File verbFile = new File("d://zuoye//verb.txt");
File nounFile = new File("d:\\zuoye\\noun.txt");
//创建字节输出流对象
FileOutputStream verbFileOutStream = null;
FileOutputStream nounFileOutStream = null;
try {
//初始化输出流
verbFileOutStream = new FileOutputStream(verbFile);
nounFileOutStream = new FileOutputStream(nounFile);
//创建字节数组(字符串->字符数组)
byte[] verbBytes = verbs.getBytes();
byte[] nounBytes = nouns.getBytes();
//输出
verbFileOutStream.write(verbBytes);
nounFileOutStream.write(nounBytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//释放资源
try {
verbFileOutStream.close();
nounFileOutStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
思路:(参考答案)采用的基础过程,有点繁琐.
针对该题可以采用匹配前4位字符串,将动词和名词区分出来(利用equals),然后利用verb.write(words[i].getBytes(),Offset,len);输出剩余字符串.
2. 递归查找指定目录中(包括子目录中),所有的.java文件, 并且,把所有这些找到的java文件,复制到一个指定的目录下, 目录结构同Day19,递归删除那道题的firstLevel(目录手动创建即可,不用使用代码创建)
import java.io.*;
public class day2002 {
public static void main(String[] args) {
//初始化创建目录
FileHandler fileHandler = null;
try {
//创建要查找的目录
File dir = new File("d:\\firstLevel");
//利用fileHandler对象,完成递归查找,并将查找结果,存到d:\result目录中
fileHandler = new FileHandler("d:\\result");
//由FileFilter接口的匿名内部类对象,指明目标文件的筛选条件(new FileFilter()),开始递归
fileHandler.findFile(dir, new FileFilter() {
@Override
public boolean accept(File pathname) {
//查找以.java结尾的文件
return pathname != null
&& pathname.isFile()
&& pathname.getName().endsWith(".java");
}
});
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 利用该类,完成文件的递归查找功能
class FileHandler {
//创建保存java文件的目录路径
File dir;
public FileHandler(String recordPath) throws FileNotFoundException {
//利用目标文件的路径字符串,初始化,表示用来存储文件名的文件的File对象
dir = new File(recordPath);
//确保目标目录存在,不存在则创建
dir.mkdirs();
}
// 利用该方法,使用由FileFilter对象,所指明的筛选条件,筛选出符合条件的文件保存到指定文件中
public void findFile(File file, FileFilter filter) throws IOException {
//目录高级获取功能,返回一个File数组
File[] files = file.listFiles();
//递归+筛选功能
if (files == null) {
//说明当前File dir其实表示的是一个文件
if (filter.accept(file)) {
//满足筛选条件,就将满足条件的文件复制到目标目录下
//创建File对象,表示复制的目标文件
File destFile = new File(dir, file.getName());
// 自己定义cooy方法,复制满足条件的文件到目标目录
copyFile(file, destFile);
}
return;
}
//不为文件,则为目录,重复筛选(递归)
for (int i = 0; i < files.length; i++) {
findFile(files[i], filter);
}
}
//copyFile方法,利用缓冲流完成文件的复制
public void copyFile(File srcFile, File destFile) {
// 创建缓冲输入/输出字节流对象
InputStream in = null;
OutputStream out = null;
//初始化字节流对象,利用buffered包装流,提高效率
try {
in = new BufferedInputStream(
new FileInputStream(srcFile));
out = new BufferedOutputStream(
new FileOutputStream(destFile));
//复制文件
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//释放资源
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
思路:定义一个类,完成递归查找方法.
在类中定义findFile方法利用FileFilter功能筛选出想要的文件,其中利用listFile功能把所有的文件以数组的形式存储,利用for循环完成筛选的递归功能;
定义copyFile方法,复制筛选好的文件;
最后释放资源.