Java文件IO测试题_Java基础IO文件拷贝练习题

/**

* 编写一个程序,把指定目录下的所有的带.java文件都拷贝到另一个目录中,拷贝成功后,把后缀名是.java的改成.txt。

*/

1.我们看到这个题还是用大化小的思想来做

分析:1.拷贝 >>> 选择什么流呢??>>>拷贝我在上篇博客中写到,我们用字节流,字符流只读只写

2.java结尾 >> 我们可以想到String中的endsWith()方法.

3.拷贝成功后再改后缀名>>File中有一个后缀名的方法renameTo()的方法

4.如果就收拷贝的文件的文件夹中有相同的名字的文件怎么办呢?? 想想这个

我们看代码:第一步:1.拷贝 >>> 选择什么流呢??>>>拷贝我在上篇博客中写到,我们用字节流,字符流只读只写

2.java结尾 >> 我们可以想到String中的endsWith()方法.

/**文件的拷贝*/

private static void copy(File src, File dest) throwsIOException {

File[] files=src.listFiles();//判断数组是否为空

if (files != null) {//遍历数组

for(File file : files) {//是文件并且以java结尾的文件

if (file.isFile() && file.getName().endsWith(".java")) {//缓冲流拷贝 速度快

BufferedInputStream bis = new BufferedInputStream(newFileInputStream(file));

BufferedOutputStream bos= newBufferedOutputStream(new FileOutputStream(newFile(dest, file.getName())));byte[] by = new byte[1024];int len = 0;while ((len = bis.read(by)) != -1) {

bos.write(by,0, len);

}//关流

bos.close();

bis.close();//如果是文件

} else if(file.isDirectory()) {//在判断这个文件夹是不是空的或者没有java文件 那样我们就不要复制了 定义remove()

if(remove(file)) {

File newfile= newFile(dest, file.getName());

newfile.mkdirs();

copy(file, newfile);

}

}

}

}

}private static booleanremove(File file) {

File[] files=file.listFiles();//判断数组是否为空

if (file != null) {for(File file2 : files) {//是文件并且以java结尾的文件 返回真

if (file2.isFile() && file2.getName().endsWith(".java")) {return true;//这里是关键 不经要是文件 而且还要满足文件中要包含java文件

} else if (file2.isDirectory() &&remove(file2)) {return true;

}

}

}//条件不符合返回false

return false;

}

}

第二步:3.拷贝成功后再改后缀名>>File中有一个后缀名的方法renameTo()的方法

4.如果就收拷贝的文件的文件夹中有相同的名字的文件怎么办呢?? 想想这个

//.java修改成.txt

private static void revamp(File dest) throwsIOException{

File[] file=dest.listFiles();for(File file2 : file) {if(file2.isFile()){//获取文件名称字符串

String sb =file2.getName();//判断是否是Java文件

if(sb.endsWith(".java")){

StringBuilder sb1= newStringBuilder(sb);//替换 把java字符串 替换成.txt字符串

sb1.replace(sb1.toString().indexOf(".java"), sb1.length(), ".txt");//新建文件

File newfile = newFile(dest, sb1.toString());//再来一次循环 循环本次数组中的文件和文件夹

for(File file3 : file) {//如果里面有相同的文件的就删除在 重命名

if(file3.isFile() &&newfile.getName().equals(file3.getName())){

file3.delete();

}

}//判断文件夹中是否存在重名

file2.renameTo(newfile);

}//如果是文件 就递归

} else if(file2.isDirectory()) {

revamp(file2);

}

}

}

main方法

public static void main(String[] args) throwsIOException {//封装文件地址

File src = new File("E:\\IO流");

File dest= new File("E:\\IO");//拷贝

copy(src, dest);//重命名

revamp(dest);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值