黑马程序员技术交流社区

标题: IO流(拷贝文件) [打印本页]

作者: yiranpanda    时间: 2015-10-15 22:35
标题: IO流(拷贝文件)

在控制台录入文件的路径,将文件拷贝到当前项目下:


作者: usernwangxu    时间: 2015-10-15 22:35
package com.heima.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Test2 {

        /**
         * 在控制台录入文件的路径,将文件拷贝到当前项目下
         *
         * 分析:
         *
         * 1,定义方法对键盘录入的路径进行判断,如果是文件就返回
         * 2,在主方法中接收该文件
         * 3,读和写该文件
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                File file = getFile();                                        //获取文件
                BufferedInputStream  bis = new BufferedInputStream(new FileInputStream(file));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));
               
                int b;
                while((b = bis.read()) != -1) {
                        bos.write(b);
                }
               
                bis.close();
                bos.close();
        }

        /*
         * 定义一个方法获取键盘录入的文件路径,并封装成File对象返回
         * 1,返回值类型File
         * 2,参数列表无
         */
        public static File getFile() {
                Scanner sc = new Scanner(System.in);                                //创建键盘录入对象
                System.out.println("请输入一个文件的路径:");
                while(true) {
                        String line = sc.nextLine();                                        //接收键盘录入的路径
                        File file = new File(line);                                                //封装成File对象,并对其进行判断
                        if(!file.exists()) {
                                System.out.println("您录入的文件路径不存在,请重新录入:");
                        }else if(file.isDirectory()) {
                                System.out.println("您录入的是文件夹路径,请重新录入:");
                        }else {
                                return file;
                        }
                }
        }
}

作者: 蓝天I    时间: 2015-10-15 22:58
这是以前写的一个成熟的demo,你可以参照看看,祝你早日掌握,让我们一起来共同进步:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Test2 {

        /**
         * 在控制台录入文件的路径,将文件拷贝到当前项目下
         *
         * 分析:
         *
         * 1,定义方法对键盘录入的路径进行判断,如果是文件就返回
         * 2,在主方法中接收该文件
         * 3,读和写该文件
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                File file = getFile();                                        //获取文件
                BufferedInputStream  bis = new BufferedInputStream(new FileInputStream(file));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));
               
                int b;
                while((b = bis.read()) != -1) {
                        bos.write(b);
                }
               
                bis.close();
                bos.close();
        }

        /*
         * 定义一个方法获取键盘录入的文件路径,并封装成File对象返回
         * 1,返回值类型File
         * 2,参数列表无
         */
        public static File getFile() {
                Scanner sc = new Scanner(System.in);                                //创建键盘录入对象
                System.out.println("请输入一个文件的路径:");
                while(true) {
                        String line = sc.nextLine();                                        //接收键盘录入的路径
                        File file = new File(line);                                                //封装成File对象,并对其进行判断
                        if(!file.exists()) {
                                System.out.println("您录入的文件路径不存在,请重新录入:");
                        }else if(file.isDirectory()) {
                                System.out.println("您录入的是文件夹路径,请重新录入:");
                        }else {
                                return file;
                        }
                }
        }
}



作者: 徐慧shanghai    时间: 2015-10-16 09:23
刚刚写了,测试跑通的
思路是  首先键盘录入文件路径 (需要填写绝对路径   样例   D:\WORK\workspaceEPUB\Reader10151700.rar )
拿到文件路径后获取当前路径 并组织文件名   例如当前是在   D:\Test\ 目录下  那么要拷贝的文件名就是  D:\Test\Reader10151700.rar
这样的 (这个过程中使用了一些字符串的操作)
最后进行文件拷贝  调用文件拷贝方法

当然里面的异常目前没有处理,你可以自己完善一下,例如输入的文件不存在啊 ,输入字符串不是文件名啊 等等的 可以自己处理判断一下

下面是源码
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.nio.channels.FileChannel;
  6. import java.util.Scanner;

  7. public class Test {
  8.         @SuppressWarnings("resource")
  9.         public static void main(String[] args) {
  10.                 Scanner s = new Scanner(System.in);
  11.                 String str = null;
  12.                 System.out.println("请输入您想输入的字符串:");
  13.                 str = s.next();
  14.                 // 遍历文件夹 这个文件夹为需要 扫描的文件夹
  15.                 File f = new File(str);
  16.                 File directory = new File("");// 设定为当前文件夹
  17.                 //获 当前路径以及 文件名
  18.                 String copypath = directory.getAbsolutePath()+ str.substring(str.lastIndexOf("\\"), str.length());
  19.                 //进行文件拷贝
  20.                 fileChannelCopy(f,new File(copypath));
  21.         }

  22.         /***
  23.          * 文件拷贝方法
  24.          *
  25.          * @param s
  26.          * @param t
  27.          */
  28.         public static void fileChannelCopy(File s, File t) {
  29.                 FileInputStream fi = null;
  30.                 FileOutputStream fo = null;
  31.                 FileChannel in = null;
  32.                 FileChannel out = null;
  33.                 try {
  34.                         fi = new FileInputStream(s);
  35.                         fo = new FileOutputStream(t);
  36.                         in = fi.getChannel();// 得到对应的文件通道
  37.                         out = fo.getChannel();// 得到对应的文件通道
  38.                         in.transferTo(0, in.size(), out);// 连接两个通道,并且从in通道读取,然后写入out通道
  39.                 } catch (IOException e) {
  40.                         e.printStackTrace();
  41.                 } finally {
  42.                         try {
  43.                                 fi.close();
  44.                                 in.close();
  45.                                 fo.close();
  46.                                 out.close();
  47.                         } catch (IOException e) {
  48.                                 e.printStackTrace();
  49.                         }
  50.                 }
  51.         }
  52. }
复制代码

作者: 赵鹏    时间: 2015-10-20 01:37
主要是要更改输入流,将输入流更改为:
                System.setIn(new FileInputStream());
                System.setOut(new PrintStream("文件名"));




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2