java的文件流练习
拷贝文件
1. 题目:指定一个路径,把路径下的txt文件进行拷贝粘贴到一个新的路径
import java.io.File;
import java.io.FileFilter;
public class Exercise03 {
public static void main(String[] args) {
method01();
}
public static void method01(){
String str="F:/file2/100txt";
File f=new File(str);
File fa[]=f.listFiles();
for (File f1:fa){
boolean b=f1.isFile();
}
File[] fs=f.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
String regex=".+\\.txt";
return pathname.isFile()&&pathname.getName().matches(regex);
}
});
createFile(fs);
}
public static void createFile(File[] fs){
String path="F:/file3";
File f=new File(path);
if(!f.exists()){
f.mkdirs();
System.out.println("文件创建成功!");
}
try {
boolean b;
for(File f1:fs)
{
File f2=new File(f,f1.getName());
b=f2.createNewFile();
if (b){
System.out.println(f2.getName());
}
}
}catch (Exception e){e.printStackTrace();}
}
}
移动文件
2.题目
分别输入两个路径pa,pb 把pa路径的文件(子路径),都移动到pb中(这里是移动不是拷贝),文
本文件(txt)使用字符流,其他文件使用字节流来实现 ,注意如果pa==pb不能执行, 也不能移
动到pa的子目录下
public static void method(){
String pa="F:"+File.separator+"file4"+File.separator+"pa";
String pb="F:"+File.separator+"file4"+File.separator+"pb";
if (pa.equals(pb)){
return;
}
if(pb.toUpperCase().startsWith(pa.toLowerCase())){
System.out.println("不能移动到子目录下");
return;
}
File fa = new File(pa);
File fb = new File(pb);
FileUtil.createDir(fb);
copyAndPaste(fa,fb);
}
public static void copyAndPaste(File fa,File fb){
if (fa.isDirectory()&& fb.isDirectory()){
File[] f1=fa.listFiles();
for (File file1:f1){
String fileName=file1.getName();
if (file1.isDirectory()){
File file2=new File(fb,fileName);
FileUtil.createDir(file2);
copyAndPaste(file1,file2);
}else {
File file22 = new File(fb,fileName);
FileUtil.createFile(file22);
String regex=".+\\.((java)|(html)|(txt)|(jsp))";
if (fileName.matches(regex))FileUtil.fileReaderAndWriter(file1,file22);
else FileUtil.fileInputAndOutput(file1,file22);
}
file1.delete();
}
}
fa.delete();
}
删除文件
题目:指定一个路径实现把该路径下的txt文件删除, 如果该路径下已经没有文件,也要删除该路径,
如果还有其他路径则不删除该路径
public static void method02(File f){
if (f.isDirectory()){
File[] f1=f.listFiles(new FileFilter() {
@Override
public boolean accept(File f) {
String regex=".+\\.txt";
return f.getName().matches(regex)||f.isDirectory();
}
});
if (f1.length==0){
System.out.println(f.getName()+"是一个路径");
f.delete();
}
for(File f2:f1){
method02(f2);
}
}else {
System.out.println(f.getName()+"是一个文件");
String regex=".+\\.txt";
f.delete();
}
}
复制粘贴产生副本问题
题目:指定一个路径实现对该路径的文件复制粘贴3次,每完成一次粘贴就随机删除该路径的(n>2)
个文件,如果文件的名称出现; 重复则自动添加副本,若“副本"名字已经存在则给名字添加序号,
如“副本(2)”且数字必须连续
public static void method04(){
try {
String str="F:/file";
File f=new File(str);
System.out.println("开始执行。。。。");
findFiles(f);
System.out.println("执行完成。。。。");
}catch (Exception e){e.printStackTrace();}
}
public static void findFiles(File file) throws Exception{
if (file.isDirectory()){
File[] files=file.listFiles();
for(File file1:files){
findFiles(file1);
}
}else {
String newFileName = FileUtil.createFileName(file);
File file2 = new File(file.getParent(),newFileName);
FileUtil.createFile(file2);
Thread.sleep(100);
}
}
public static boolean createFile(File f){
boolean b = false;
try {
if (!f.exists()){
b = f.createNewFile();
}else {
b = true;
}
}catch (IOException e){
b = false;
System.out.println("路径出错或不存在!");
}
return b;
}
public static String createFileName(File f){
if(f.isDirectory()){
return f.getName();
}
String newFileName = "";
int i = 0;
while (true){
String fileName = f.getName();
int index = fileName.lastIndexOf(".");
String suffix = fileName.substring(index);
String prefix = fileName.substring(0,index);
if(i == 0){
prefix += "-副本";
}else {
prefix += "-副本(" + (i+1) +")";
}
newFileName = prefix + suffix;
File f1 = new File(f.getParent(),newFileName);
if (f1.exists()){
i++;
continue;
}
break;
}
return newFileName;
}