Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

  这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码:

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Scanner;

//从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
public class Demo1 {
    public static void main(String[] args) throws IOException {
        Path path1=getPath();    //获取源文件夹路径
        Path path2=getPath();   //获取目的文件夹路径
        Path path=path1.getFileName();    //获取源文件的最后一个文件名
        path2=path2.resolve(path);     //在目的文件中建立文件夹存储源文件的内容
        copy(path1,path2);
    }

    public static void copy(Path path1, Path path2) throws IOException {
        Files.walkFileTree(path1, new SimpleFileVisitor<Path>() {
            //在访问文件夹前执行的操作
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                Path p1=path1.relativize(dir);   //获取文件夹相对路径
                Path p2=path2.resolve(p1);    //在目的文件夹中建立路径
                Files.createDirectories(p2);   //建立文件夹.
                return FileVisitResult.CONTINUE;    //继续访问.
            }

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                Path p1=path1.relativize(file);     //获取文件相对于源文件的相对路径
                Path p2=path2.resolve(p1);      //获取文件在目的文件中的路径位置
                Files.copy(file, p2);         //利用Files类的copy功能复制文件
                return FileVisitResult.CONTINUE;     //继续访问.
            }

            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                return FileVisitResult.CONTINUE;     //访问失败,继续访问.
            }

        });
    }

    public static Path getPath() {
        System.out.println("请输入一个文件夹!");
        String str=null;
        Scanner sc=new Scanner(System.in);
        str=sc.nextLine();
        Path path=Paths.get(str);        //获取路径
        if(!Files.exists(path)) {
            System.out.println("请输入一个存在的文件夹");
            getPath();
        }
        if(Files.isRegularFile(path)) {
            System.out.println("请输入文件!");
            getPath();
        }
        return path;
    }
}
时间: 2024-10-27 13:59:51

Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中的相关文章

从键盘接收两个文件夹路径,把其中一个文件夹(包含内容),拷贝到另一个文件夹中

package cn.it.text; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Scanner; /* * 1.从键盘接收两个文件夹路径,把其中一个文件夹(包含内容) * 拷贝到另一个文件

从键盘接收字符类型和字符串类型的数据(剪刀石头布)

在程序里定义一个剪刀石头布的规则,然后定义两个字符型变量,接着从键盘上接收两个数据分别赋给这两个变量,再按照已经设定好了的规则来 比较,最后输出结果. .        这个需要首先导入Scanner类:import java.util.Scanner;,定义一个Scanner对象,Scanner p = new Scanner(System.in);        然后定义一个字符串变量,先从键盘上接收这个字符串的内容,String p1 = p.next();         //大神说,要

通过键盘接收数值和字符,实现计算器功能。

import java.util.Scanner; /** * @author 蓝色以太 * 通过键盘接收数值和字符,实现计算器功能. */ public class Calculator { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入第一个数值:"); double num1=sc.nextDouble(); System.out

题目1489:计算两个矩阵的乘积

时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:5744 解决:1234 题目描述: 计算两个矩阵的乘积,第一个是2*3,第二个是3*2 输入: 输入为两个矩阵,其中一个为2*3的矩阵,另一个为3*2的矩阵 输出: 一个2*2的矩阵(每一个数字后都跟一个空格) 样例输入: 1 2 3 3 4 5 6 7 8 9 10 11 样例输出: 52 58 100 112 来源: 2012年哈尔滨工业大学计算机研究生机试真题 矩阵乘积的计算是  52 = 1*6+2*8+3*10  58 =

九度_题目1512:用两个栈实现队列

这个思路实在太难想了.... /* *str为PUSH,通过s1.push()使元素入栈; *str为POP时,s2非空,输出栈顶元素,s2.pop()弹出栈顶元素;若s2弹出元素后为空且s1不空,将s1中所有元素push进s2: *str为POP时,s2为空,若s1不空,将s1中所有元素push进s2,最后输出栈顶元素并通过<span style="font-family: Arial, Helvetica, sans-serif;">s2.pop()弹出栈顶元素<

【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。

第 14 题(数组):题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是 O(n).如果有多对数字的和等于输入的数字,输出任意一对即可.例如输入数组 1.2.4.7.11.15 和数字 15.由于 4+11=15,因此输出 4 和 11. 要求时间是O(n)肯定就只能扫描一遍. 又有两个数字要找,那就只能一个从头向后找 一个从后向前找 初始把大值设为最后一个数, 小值设为第一个数,如果数字和大于和,则减小大数的数值, 反之增大小

(四)从键盘接收数据和数据类型转换

  JavaSE(一) --从键盘接收数据和数据类型转换 一.利用Scanner获取键盘输入: System.out.println("输入一个字符串:"); Scanner input=new Scanner(System.in); String a=input.nextLine(); System.out.println("你刚刚输入的是"+a); 注意nextLine()和next()的区别. 当是next()的时候,只会接收第一个结束符(空格或回车)之前的东

键盘录入两个数据,比较两个是否相等 ,用方法改进

package wac.wev.LianXi; import java.util.Scanner; //需求:键盘录入两个数据,比较两个是否相等 ,用方法改进public class FunctionDemo {public static void main(String[] args){//创建键盘录入对像Scanner sc = new Scanner(System.in);//第一个数据System.out.println("请输入第一个数据");int a= sc.nextIn

键盘接收用户输入

键盘接收用户输入   第一步:  导入包,必须位于Java 源文件中的第一行 import java.util.Scanner; 第二步:创建Scanner对象 Scanner input = new Scanner(System.in); 第三步:友好提示 System.out.print("请输入一个数: "); 第四步:键盘输入 int num = input.nextInt(); //注意:等待用户接收键盘输入值,当按下回车键,则表示输入完毕,并将回车之前所输入的内容赋给左侧的