从控制台获取输入的文件目录然后将该目录(包含子目录)下的.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();
}
}
}
}
以上代码,大家在参考的时候可以有自己的思考,代码只供参考,要有自己的思路在里面。
解题思路:
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();
}
}
}
}
以上代码,大家在参考的时候可以有自己的思考,代码只供参考,要有自己的思路在里面。
相关文章推荐
- 获取一个想要的指定文件的集合,获取文件夹下(包含子目录的所有.java的文件对象,并存储到集合中)
- java IO--获取指定目录下(包含子目录)指定拓展名的文件
- 获取文件夹下的文件名生成新的文件&DOC命令想从指定的txt中读出文件名,然后在指定文件夹以及子目录下搜索文件,并拷贝到指定目录
- java遍历文件夹并复制文件到指定目录
- Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录
- JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件
- 列出指定目录下文件或者文件夹,包含子目录的内容。
- Java 根据某个文件名,获取相对应的文件夹,然后取文件夹中所有文件
- java复制文件夹及所有子目录和文件
- linux环境下,只复制文件夹目录及其子目录,不复制文件夹下面的文件,附:windows下的情况
- JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件
- Java新建目录、新建文件、删除文件、删除文件夹、删除文件夹里面的所有文件、复制整个文件夹内容
- PHP 获取指定目录下所有文件(包含子目录)
- 使用JAVA实现比较两个文件夹下的文件新增和修改情况,并复制到新的目录(实现增量更新项目)
- C#获取指定目录包含的文件和子目录
- JAVA 程序中如何拷贝一个目录下的文件及子目录到另一个目录,如何获取系统环境变量等...
- java单个文件复制,递归删除、复制目录下所有内容,递归创建文件夹,.7z文件解压等
- JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。
- java文件操作类(新建 复制 移动 删除文件和文件夹 获取扩展名)
- Java文件目录树状结构:控制台打印某个文件夹下的文件目录树状结构