黑马程序员技术交流社区
标题:
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
这样的 (这个过程中使用了一些字符串的操作)
最后进行文件拷贝 调用文件拷贝方法
当然里面的异常目前没有处理,你可以自己完善一下,例如输入的文件不存在啊 ,输入字符串不是文件名啊 等等的 可以自己处理判断一下
下面是源码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.Scanner;
public class Test {
@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String str = null;
System.out.println("请输入您想输入的字符串:");
str = s.next();
// 遍历文件夹 这个文件夹为需要 扫描的文件夹
File f = new File(str);
File directory = new File("");// 设定为当前文件夹
//获 当前路径以及 文件名
String copypath = directory.getAbsolutePath()+ str.substring(str.lastIndexOf("\\"), str.length());
//进行文件拷贝
fileChannelCopy(f,new File(copypath));
}
/***
* 文件拷贝方法
*
* @param s
* @param t
*/
public static void fileChannelCopy(File s, File t) {
FileInputStream fi = null;
FileOutputStream fo = null;
FileChannel in = null;
FileChannel out = null;
try {
fi = new FileInputStream(s);
fo = new FileOutputStream(t);
in = fi.getChannel();// 得到对应的文件通道
out = fo.getChannel();// 得到对应的文件通道
in.transferTo(0, in.size(), out);// 连接两个通道,并且从in通道读取,然后写入out通道
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fi.close();
in.close();
fo.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
复制代码
作者:
赵鹏
时间:
2015-10-20 01:37
主要是要更改输入流,将输入流更改为:
System.setIn(new FileInputStream());
System.setOut(new PrintStream("文件名"));
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2