-------
android培训、
java培训、期待与您交流! ----------16.取出D:盘下全部的.java文件的文件路径保存在java.txt文件中
思路:
遍历文件用list()方法和递归
判断.java后缀用endsWith()方法,因为是文本文件,故用FileInputStream和FileoutputStream
还要注意编码习惯:讨论,边界和异常
注意:
当目录下全是文件时,直接用list(FilenameFilter fnf)即可
但当目录下有子文件夹时,就要结合递归和判断(即先递归得到所有的文件名称,
再循环判断,放入集合---也可以边递归边判断然后边存入)
注意:如果把题目改成把所有的.java结尾的存入一个目录,而不是写名字到txt中,就不一样了
代码:
class Program {
public static void main(String[] args){
File formFile = new File("D:");
File toFile = new File("java.txt");
checkFile(formFile,toFile);
}
public void checkFile(File fromFile, File toFile) throws IOException{
//编码三习惯:异常。边界。讨论
if(!fromFile.exists()){
throw new RuntimeException("该文件不存在,请重新检查!");
}else if(from.isDirectory()){
//遍历文件
File[] files = formFile.listFiles();
//循环
for(File file : files){
checkFile(file,toFile);
}
}else if(fromFile.getName().endsWith(".java")){
copyFile(fromFile,toFile);
}
}
public void copyFile(File fromFile,File toFile){
Stirng name = fromFile.getName();
FileInputStream fis = new FileInputStream(fromFile);
FileOutputStream fos = new FileOutputStream(new File(toFile,name);
try{
byte[] bytes = new bytes[1024];
int len;
while((fis.read(bytes) = len) != -1){
fos.write(bytes,0,len);
}
}catch(IOException e){
e.printStackTrace();
}finally{
fis.close();
fos.close();
}
}
}
或者:
class Program {
public static void main(String[] args){
File formFile = new File("D:");
File toFile = new File("java.txt");
checkFile(formFile,toFile);
}
public void checkFile(File fromFile, File toFile) throws IOException{
//编码三习惯:异常。边界。讨论
if(!fromFile.exists()){
throw new RuntimeException("该文件不存在,请重新检查!");
}else if(from.isDirectory()){
//遍历文件
File[] files = formFile.listFiles();
//循环
for(File file : files){
checkFile(file,toFile);
}
}else if(fromFile.getName().endsWith(".java")){
writeFileName(fromFile);
}
}
public void writeFileName(File fromFile)throws IOException{
String name = formFile.getName();
File f = new File("java.txt");
FileWriter fw = new FileWriter(f);
try{
fw.write(name);
}catch(IOException e){
e.printStackTrace()
}finally{
fw.close();
}
}
}
----------
这俩的区别只有一点其实:
就是new FileOutputStream(new File(toFile,name))
new FileOutputStream(new File("java.txt"));
上边的是写入文件到一个目录中
下边的是在文件中写字符串
思路:
遍历文件用list()方法和递归
判断.java后缀用endsWith()方法,因为是文本文件,故用FileInputStream和FileoutputStream
还要注意编码习惯:讨论,边界和异常
注意:
当目录下全是文件时,直接用list(FilenameFilter fnf)即可
但当目录下有子文件夹时,就要结合递归和判断(即先递归得到所有的文件名称,
再循环判断,放入集合---也可以边递归边判断然后边存入)
注意:如果把题目改成把所有的.java结尾的存入一个目录,而不是写名字到txt中,就不一样了
代码:
class Program {
public static void main(String[] args){
File formFile = new File("D:");
File toFile = new File("java.txt");
checkFile(formFile,toFile);
}
public void checkFile(File fromFile, File toFile) throws IOException{
//编码三习惯:异常。边界。讨论
if(!fromFile.exists()){
throw new RuntimeException("该文件不存在,请重新检查!");
}else if(from.isDirectory()){
//遍历文件
File[] files = formFile.listFiles();
//循环
for(File file : files){
checkFile(file,toFile);
}
}else if(fromFile.getName().endsWith(".java")){
copyFile(fromFile,toFile);
}
}
public void copyFile(File fromFile,File toFile){
Stirng name = fromFile.getName();
FileInputStream fis = new FileInputStream(fromFile);
FileOutputStream fos = new FileOutputStream(new File(toFile,name);
try{
byte[] bytes = new bytes[1024];
int len;
while((fis.read(bytes) = len) != -1){
fos.write(bytes,0,len);
}
}catch(IOException e){
e.printStackTrace();
}finally{
fis.close();
fos.close();
}
}
}
或者:
class Program {
public static void main(String[] args){
File formFile = new File("D:");
File toFile = new File("java.txt");
checkFile(formFile,toFile);
}
public void checkFile(File fromFile, File toFile) throws IOException{
//编码三习惯:异常。边界。讨论
if(!fromFile.exists()){
throw new RuntimeException("该文件不存在,请重新检查!");
}else if(from.isDirectory()){
//遍历文件
File[] files = formFile.listFiles();
//循环
for(File file : files){
checkFile(file,toFile);
}
}else if(fromFile.getName().endsWith(".java")){
writeFileName(fromFile);
}
}
public void writeFileName(File fromFile)throws IOException{
String name = formFile.getName();
File f = new File("java.txt");
FileWriter fw = new FileWriter(f);
try{
fw.write(name);
}catch(IOException e){
e.printStackTrace()
}finally{
fw.close();
}
}
}
----------
这俩的区别只有一点其实:
就是new FileOutputStream(new File(toFile,name))
new FileOutputStream(new File("java.txt"));
上边的是写入文件到一个目录中
下边的是在文件中写字符串