---------------------- android培训、java培训、期待与您交流! ----------------------
本节开始研究文件的拷贝
文件的拷贝,要分为单个文件的拷贝和整个文件夹的拷贝。本节主要研究单个文件的拷贝。
实现方式分别为通过字节输入输出流和字符输入输出流,下面是具体实现:
/**
*实现一
*从字节输入输出流中读取文件
*
**/
/*
import java.io.*;
public class MyCopy
{
public static void main(String args[])
{
try
{
MyCopy j = new MyCopy();
//String args[] 表示一个字符串数组,这个通常是用来传递参数的.如:String args[] = {"12", "abc"};args[0]="12",args[1]="abc"
j.CopyFile(new File(args[0]),new File(args[1]));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void CopyFile(File in, File out) throws Exception
{
FileInputStream fis = new FileInputStream(in);
FileOutputStream fos = new FileOutputStream(out);
byte[] buf = new byte[1024];
int i = 0;
//i=fis.read(buf) 用来求原文档文本的长度
//public final int read(byte[] b) throws IOException 从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组 b 中。以整数形式返回实际读取的字节数。
//在输入数据可用、检测到文件末尾 (end of file) 或抛出异常之前,此方法将一直阻塞。
//读入缓冲区的字节总数;如果因为已经到达流末尾而没有更多的数据,则返回 -1。
while((i=fis.read(buf))!=-1)
{
//用来写入到目标文档
fos.write(buf, 0, i);
}
fis.close();
fos.close();
}
}*/
/**
* 程序运行时的命令语法为:
*javac MyCopy.java (sourcefile) (destfile)
*java MyCopy.java d:\1.txt e:\1.txt
*当然前提c盘1.txt 已存在。
**/
/**
*实现二
*从字符输入输出流中读取文件,并借助于字符缓冲区
*
**/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class MyCopy
{
public static void copyFile(String str1, String str2)
{
File file1 = new File(str1);//源文件
File file2 = new File(str2);//目标文件
try
{
//第一种方法,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
FileReader reader = new FileReader(file1);
BufferedReader br = new BufferedReader(reader);//准备从源文件度数据
FileWriter writer = new FileWriter(file2);
PrintWriter print = new PrintWriter(writer);//准备向目标文件中写文件
String temp = br.readLine();
//while(br.readLine()!= null)//只能复制第一行???
while(temp!= null)
{ //读取和写入文件
print.println(temp);
//读取文本文件的一行,每执行一次,文件读取指针自动移到下一行,再执行时,读取的就是下一行的内容
temp=br.readLine();
}
print.flush();
br.close();//关闭输入流
print.close();//关闭输出流
//第二种方法,没有借用缓冲区。
//采用与实现一相似的办法。区别在于实现一用的是字节: byte[] buf = new byte[1024];,此方法用的是字符:char[] buf = new char[1024];
/*FileReader re = new FileReader(file1);
FileWriter wr = new FileWriter(file2);
char[] buf = new char[1024];
int i = 0;
//i=re.read(buf) 用来求原文档文本的长度
//public int read(char[] cbuf) throws IOException 将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。
//读取的字符数,如果已到达流的末尾,则返回 -1
while((i=re.read(buf))!=-1)
{
//用来写入到目标文档
wr.write(buf, 0, i);
}
re.close();
wr.close();
*/
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}//处理异常
}
public static void main(String[] args)
{
if(args.length<2)
{
System.out.println("参数不够,请输入两个参数");
}
else if(args.length >2)
{
System.out.println("参数太多,请输入两个参数");
}else
{
copyFile(args[0], args[1]);//测试
}
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.youkuaiyun.com/heima