您的位置:首页 > 编程语言 > Java开发

从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到D:/java文件夹中

2018-01-21 19:01 921 查看
   6.从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到D:/java文件夹中

   

   解题思路:

    1,控制台输入两个文件路径

    2,将路径下的文件遍历,碰到 .java 文件 就调用 复制函数,将相关的.java复制过去 

    3, 复制文件函数 CopyFile

参考文章如下:

Java基础阶段综合练习      https://www.cnblogs.com/hd976521/archive/2017/02/10/6387514.html

参考代码:

package com.模拟练习题四;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

/**
*2.从控制台获取输入的文件目录然后将指定目录下的.java文件复制到D:/java文件夹中
* @author Administrator
*/
public class Demo02 {
public static void main(String[] args) throws IOException {
File file = getFile();
File dest = new File("D:\\java");
if(!dest.exists()){
dest.mkdirs();
}
copy(file,dest);
}

private static void copy(File file, File dest) throws IOException {
// TODO Auto-generated method stub
File[] files = file.listFiles();
if(files!=null){
for (File file2 : files) {
//判断是否是文件 在判断段结尾是否是.java
if(file2.isFile() && file2.getName().toLowerCase().endsWith(".java")){
BufferedInputStream br = new BufferedInputStream(new FileInputStream(file2));
BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream(new File(dest,file2.getName())));
byte[] by = new byte[1024];
int len = 0;
while((len=br.read())!=-1){
bw.write(by, 0, len);
}
br.close();
bw.close();
}else if(file2.isDirectory()){
copy(file2
4000
, dest);
}
}
}
}

private static File getFile() {
// TODO Auto-generated method stub
System.out.println("请输入一个文件夹路径");
Scanner sc = new Scanner(System.in);
String str =sc.nextLine();
File file = new File(str);
while(true){
if(!file.exists()){
System.out.println("你输入的文件夹路径不存在,请重新输入");
}else if(file.isFile()){
System.out.println("你输入的是文件路径,请重新输入");
}else{
return file;
}
}
}
}下面是我写的代码,为了跟前面的文件过滤器FileFilter 连接上,所以我选择了用过滤器来筛选 .java文件
class MyFileFilter 的代码:

package HomeWork6;

import java.io.File;
import java.io.FileFilter;

public class MyFileFilter implements FileFilter{

/*public boolean accept(File pathname) {
return false;
}*/
//如果是文件夹或者是以 “.java”结尾的,就返回 true,否则返回 false
public boolean accept(File file){
if(file.isDirectory()){
return true;
}else {
String name = file.getName();
if(name.endsWith(".java")){
return true;
}else {
return false;
}
}
}

}
将文件复制过去的代码如下:

/*
6.从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到D:/java文件夹中

解题思路:
1,控制台输入两个文件路径
2,将路径下的文件遍历,碰到 .java 文件 就调用 复制函数,将相关的.java复制过去
3, 复制文件函数 CopyFile
*/
package HomeWork6;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class CopyFile_ToJava {
public static void main(String[] args) {
String path = inputFilePath();
getJavaFile(path);
}

//复制文件函数
public static void copyFile(File file){
FileReader fr = null;
FileWriter fw = null;
try{
fr = new FileReader(file.getPath());
fw = new FileWriter("h:\\java\\"+file.getName());
char[] ch = new char[1024]; //设立缓冲数组
int len = 0; //读取字符的个数
while((len = fr.read(ch)) != -1){
fw.write(ch,0,len);
}
}catch(IOException ex){
System.out.println(ex);
throw new RuntimeException("文件复制失败!");
}finally{
try{
if(fw != null)
fw.close();
}catch(IOException ex){
System.out.println(ex);
throw new RuntimeException("fw释放资源失败!");
}finally{
try{
if(fr != null)
fr.close();
}catch(IOException ex){
ex.printStackTrace();
throw new RuntimeException("fr释放资源失败!");
}
}
}
}

/*
* 方法三: 将路径下的所有 .java 文件全部选出,并存储到 list 列表中
*/
public static void getJavaFile(String path){
File file = new File(path);
File[] files = file.listFiles(new MyFileFilter());//将java文件过滤出来
for(int i = 0; i < files.length; i++){
if(files[i].isDirectory()){
getJavaFile(files[i].getPath());
}else{
copyFile(files[i]);
}
}
}

/*
* 控制台输入一个文件夹路径
*/
public static String inputFilePath(){
System.out.println("请输入要复制 .java文件 的文件夹路径:(例如:g:\\eclipse\\workspace)");
Scanner sc = new Scanner(System.in);
String path = sc.nextLine();
sc.close();
return path;
}
}


另外,复制函数,我写了有几个,供大家参考一下(当然,也为了我以后参考\(^o^)/~):
函数一:

//复制所有文件方法二
/*
* 不用文件过滤器,将所有 .java 文件全部选出来,存储到 D:\\java文件中
*/
public static void getJavaToList_2(String path) throws IOException{
File file = new File(path);
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if(files[i].isDirectory()){
getJavaToList_2(files[i].getPath());
}else {
if(files[i].getName().endsWith(".java")){
copyFile(files[i]);
}
}
}
}
函数二:
//复制所有文件方法一
//这个方法也可以,不过我总感觉有点不安全的感觉
public static void getJavaToList_1(String path) throws IOException{
File file = new File(path);
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if(files[i].isDirectory()){
getJavaToList_1(files[i].getPath());
}else {
if(files[i].getName().endsWith(".java")){
//创建读写对象,将相应的文件复制过来
FileReader fr = new FileReader(files[i].getPath());
FileWriter fw = new FileWriter("h:\\java\\"+files[i].getName());
char[] ch = new char[1024];//设置字符缓冲数组
int len = 0; //读取字符的个数
//读取文件,写入文件
while((len = fr.read(ch)) != -1){
fw.write(ch,0,len);
}
fw.close();
fr.close();

}
}
}
}

以上代码,大家在参考的时候可以有自己的思考,代码只供参考,要有自己的思路在里面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐