怎么用FileReader和FileWriter实现文件的复制 请教高手:怎么用FileReader和FileWriter实现文件的复制!能够举个实际的例子更好! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这两个类一般只用于文本文件的复制....例子的话,网上很多,google一下喵~~~` /** * 拷贝一个文件到另一个目录 */ public boolean copyFile(String from, String to) { File fromFile, toFile; fromFile = new File(from); toFile = new File(to); FileReader fis = null; FileWriter fos = null; try { toFile.createNewFile(); fis = new FileReader(fromFile); fos = new FileWriter(toFile); int bytesRead; char[] buf = new char[4 * 1024]; // 4K buffer while ((bytesRead = fis.read(buf)) != -1) { fos.write(buf, 0, bytesRead); } fos.flush(); fos.close(); fis.close(); } catch (IOException e) { System.out.println(e); return false; } return true; } import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.InputStream;import java.io.PrintWriter;public class CopyFile { public CopyFile() { } /** * 新建目录 * @param folderPath String 如 c:/fqf * @return boolean */ public void newFolder(String folderPath) { try { String filePath = folderPath; filePath = filePath.toString(); java.io.File myFilePath = new java.io.File(filePath); if (!myFilePath.exists()) { myFilePath.mkdir(); } } catch (Exception e) { System.out.println("新建目录操作出错"); e.printStackTrace(); } } /** * 新建文件 * @param filePathAndName String 文件路径及名称 如c:/fqf.txt * @param fileContent String 文件内容 * @return boolean */ public void newFile(String filePathAndName, String fileContent) { try { String filePath = filePathAndName; filePath = filePath.toString(); File myFilePath = new File(filePath); if (!myFilePath.exists()) { myFilePath.createNewFile(); } FileWriter resultFile = new FileWriter(myFilePath); PrintWriter myFile = new PrintWriter(resultFile); String strContent = fileContent; myFile.println(strContent); resultFile.close(); } catch (Exception e) { System.out.println("新建文件操作出错"); e.printStackTrace(); } } /** * 删除文件 * @param filePathAndName String 文件路径及名称 如c:/fqf.txt * @param fileContent String * @return boolean */ public void delFile(String filePathAndName) { try { String filePath = filePathAndName; filePath = filePath.toString(); java.io.File myDelFile = new java.io.File(filePath); myDelFile.delete(); } catch (Exception e) { System.out.println("删除文件操作出错"); e.printStackTrace(); } } /** * 删除文件夹 * @param filePathAndName String 文件夹路径及名称 如c:/fqf * @param fileContent String * @return boolean */ public void delFolder(String folderPath) { try { delAllFile(folderPath); //删除完里面所有内容 String filePath = folderPath; filePath = filePath.toString(); java.io.File myFilePath = new java.io.File(filePath); myFilePath.delete(); //删除空文件夹 } catch (Exception e) { System.out.println("删除文件夹操作出错"); e.printStackTrace(); } } /** * 删除文件夹里面的所有文件 * @param path String 文件夹路径 如 c:/fqf */ public void delAllFile(String path) { File file = new File(path); if (!file.exists()) { return; } if (!file.isDirectory()) { return; } String[] tempList = file.list(); File temp = null; for (int i = 0; i < tempList.length; i++) { if (path.endsWith(File.separator)) { temp = new File(path + tempList[i]); } else { temp = new File(path + File.separator + tempList[i]); } if (temp.isFile()) { temp.delete(); } if (temp.isDirectory()) { delAllFile(path+"/"+ tempList[i]);//先删除文件夹里面的文件 delFolder(path+"/"+ tempList[i]);//再删除空文件夹 } } } /** * 复制单个文件 * @param oldPath String 原文件路径 如:c:/fqf.txt * @param newPath String 复制后路径 如:f:/fqf.txt * @return boolean */ public void copyFile(String oldPath, String newPath) { try { int bytesum = 0; int byteread = 0; File oldfile = new File(oldPath); if (oldfile.exists()) { //文件存在时 InputStream inStream = new FileInputStream(oldPath); //读入原文件 FileOutputStream fs = new FileOutputStream(newPath); byte[] buffer = new byte[1444]; int length; while ( (byteread = inStream.read(buffer)) != -1) { bytesum += byteread; //字节数 文件大小 System.out.println(bytesum); fs.write(buffer, 0, byteread); } inStream.close(); } } catch (Exception e) { System.out.println("复制单个文件操作出错"); e.printStackTrace(); } } /** * 复制整个文件夹内容 * @param oldPath String 原文件路径 如:c:/fqf * @param newPath String 复制后路径 如:f:/fqf/ff * @return boolean */ public void copyFolder(String oldPath, String newPath) { try { (new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹 File a=new File(oldPath); String[] file=a.list(); File temp=null; for (int i = 0; i < file.length; i++) { if(oldPath.endsWith(File.separator)){ temp=new File(oldPath+file[i]); } else{ temp=new File(oldPath+File.separator+file[i]); } if(temp.isFile()){ FileInputStream input = new FileInputStream(temp); FileOutputStream output = new FileOutputStream(newPath + "/" + (temp.getName()).toString()); byte[] b = new byte[1024 * 5]; int len; while ( (len = input.read(b)) != -1) { output.write(b, 0, len); } output.flush(); output.close(); input.close(); } if(temp.isDirectory()){//如果是子文件夹 copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]); } } } catch (Exception e) { System.out.println("复制整个文件夹内容操作出错"); e.printStackTrace(); } } /** * 移动文件到指定目录 * @param oldPath String 如:c:/fqf.txt * @param newPath String 如:d:/fqf.txt */ public void moveFile(String oldPath, String newPath) { copyFile(oldPath, newPath); delFile(oldPath); } /** * 移动文件到指定目录 * @param oldPath String 如:c:/fqf.txt * @param newPath String 如:d:/fqf.txt */ public void moveFolder(String oldPath, String newPath) { copyFolder(oldPath, newPath); delFolder(oldPath); } public static void main(String[] args) { CopyFile file = new CopyFile();// file.newFolder("newFolder22222"); file.newFile("test.txt","fdsfdsfdsfs"); }// 拷贝文件 private void copyFile2(String source, String dest) { try { File in = new File(source); File out = new File(dest); FileInputStream inFile = new FileInputStream(in); FileOutputStream outFile = new FileOutputStream(out); byte[] buffer = new byte[1024]; int i = 0; while ((i = inFile.read(buffer)) != -1) { outFile.write(buffer, 0, i); }//end while inFile.close(); outFile.close(); }//end try catch (Exception e) { }//end catch }//end copyFile} import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.channels.FileChannel;public class Test { public static void main(String[] args) { copyFile("f:/a.txt", "f:/b.txt"); } public static void copyFile(String srcFile, String destFile) { FileInputStream is = null; FileOutputStream os = null; FileChannel fin = null; FileChannel fout = null; try { is = new FileInputStream(srcFile); os = new FileOutputStream(destFile); fin = is.getChannel(); fout = os.getChannel(); fin.transferTo(0, fin.size(), fout); } catch (IOException e) { e.printStackTrace(); } finally { try { fin.close(); fout.close(); is.close(); os.close(); } catch (IOException e) { e.printStackTrace(); } } }} package test.file;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public class CopyFile { PrintStream ps = System.out; /** * @param args */ public static void main(String[] args) { CopyFile cf = new CopyFile(); try { cf.copy(System.getProperty("user.dir") + "/src/test/file/co.txt",System.getProperty("user.dir") + "/src/test/file/py.txt"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void copy(String string, String string2) throws IOException { // open file// ps.println(System.getProperties()); FileInputStream fi = new FileInputStream(string); FileOutputStream fo = new FileOutputStream(string2); // read file FileChannel fc = fi.getChannel(); byte[] b = new byte[(int) fc.size()]; ByteBuffer bf = ByteBuffer.wrap(b); fc.read(bf); // write into destination file fo.write(bf.array()); // close stream fi.close(); }} 少写了一个close.package test.file;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public class CopyFile { PrintStream ps = System.out; /** * @param args */ public static void main(String[] args) { CopyFile cf = new CopyFile(); try { cf.copy(System.getProperty("user.dir") + "/src/test/file/co.txt",System.getProperty("user.dir") + "/src/test/file/py.txt"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void copy(String string, String string2) throws IOException { // open file// ps.println(System.getProperties()); FileInputStream fi = new FileInputStream(string); FileOutputStream fo = new FileOutputStream(string2); // read file FileChannel fc = fi.getChannel(); byte[] b = new byte[(int) fc.size()]; ByteBuffer bf = ByteBuffer.wrap(b); fc.read(bf); // write into destination file fo.write(bf.array()); // close stream fi.close(); fo.close(); }} 大多数的语言都都不提供文件copy的功能,这点我感到很奇怪。但是确实如此。用流copy文件是Java的唯一办法了,Ruby还可以有File的扩展方法,C#很容易调用Win32 API.Java就只能JNI了流太慢了。 关于getBytes()问题... ">>>"什么意思 一个简单的输出问题,急,在线等 一个结构性问题,100分,大家都来看看 怎么转化String 和Char 为什么 "import com.borland.jbcl.layout.*;" 报错? JAVA里接口的问题???? 多线程为什么不对?? 帮忙解决一个swing的问题 一个很基础的问题,望各位不吝赐教。 JToolTip显示的问题? JPanel没有被运行
/**
* 拷贝一个文件到另一个目录
*/
public boolean copyFile(String from, String to) { File fromFile, toFile;
fromFile = new File(from);
toFile = new File(to);
FileReader fis = null;
FileWriter fos = null; try {
toFile.createNewFile();
fis = new FileReader(fromFile);
fos = new FileWriter(toFile);
int bytesRead;
char[] buf = new char[4 * 1024]; // 4K buffer
while ((bytesRead = fis.read(buf)) != -1) {
fos.write(buf, 0, bytesRead);
}
fos.flush();
fos.close();
fis.close();
} catch (IOException e) {
System.out.println(e);
return false;
}
return true; }
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.PrintWriter;public class CopyFile {
public CopyFile() {
}
/**
* 新建目录
* @param folderPath String 如 c:/fqf
* @return boolean
*/
public void newFolder(String folderPath) {
try {
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
if (!myFilePath.exists()) {
myFilePath.mkdir();
}
}
catch (Exception e) {
System.out.println("新建目录操作出错");
e.printStackTrace();
}
}
/**
* 新建文件
* @param filePathAndName String 文件路径及名称 如c:/fqf.txt
* @param fileContent String 文件内容
* @return boolean
*/
public void newFile(String filePathAndName, String fileContent) {
try {
String filePath = filePathAndName;
filePath = filePath.toString();
File myFilePath = new File(filePath);
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
FileWriter resultFile = new FileWriter(myFilePath);
PrintWriter myFile = new PrintWriter(resultFile);
String strContent = fileContent;
myFile.println(strContent);
resultFile.close();
}
catch (Exception e) {
System.out.println("新建文件操作出错");
e.printStackTrace();
}
}
/**
* 删除文件
* @param filePathAndName String 文件路径及名称 如c:/fqf.txt
* @param fileContent String
* @return boolean
*/
public void delFile(String filePathAndName) {
try {
String filePath = filePathAndName;
filePath = filePath.toString();
java.io.File myDelFile = new java.io.File(filePath);
myDelFile.delete();
}
catch (Exception e) {
System.out.println("删除文件操作出错");
e.printStackTrace();
}
}
/**
* 删除文件夹
* @param filePathAndName String 文件夹路径及名称 如c:/fqf
* @param fileContent String
* @return boolean
*/
public void delFolder(String folderPath) {
try {
delAllFile(folderPath); //删除完里面所有内容
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); //删除空文件夹
}
catch (Exception e) {
System.out.println("删除文件夹操作出错");
e.printStackTrace();
}
}
/**
* 删除文件夹里面的所有文件
* @param path String 文件夹路径 如 c:/fqf
*/
public void delAllFile(String path) {
File file = new File(path);
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
return;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
}
else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path+"/"+ tempList[i]);//先删除文件夹里面的文件
delFolder(path+"/"+ tempList[i]);//再删除空文件夹
}
}
}
/**
* 复制单个文件
* @param oldPath String 原文件路径 如:c:/fqf.txt
* @param newPath String 复制后路径 如:f:/fqf.txt
* @return boolean
*/
public void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件存在时
InputStream inStream = new FileInputStream(oldPath); //读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
int length;
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
}
catch (Exception e) {
System.out.println("复制单个文件操作出错");
e.printStackTrace();
}
}
/**
* 复制整个文件夹内容
* @param oldPath String 原文件路径 如:c:/fqf
* @param newPath String 复制后路径 如:f:/fqf/ff
* @return boolean
*/
public void copyFolder(String oldPath, String newPath) {
try {
(new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹
File a=new File(oldPath);
String[] file=a.list();
File temp=null;
for (int i = 0; i < file.length; i++) {
if(oldPath.endsWith(File.separator)){
temp=new File(oldPath+file[i]);
}
else{
temp=new File(oldPath+File.separator+file[i]);
}
if(temp.isFile()){
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath + "/" +
(temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ( (len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if(temp.isDirectory()){//如果是子文件夹
copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);
}
}
}
catch (Exception e) {
System.out.println("复制整个文件夹内容操作出错");
e.printStackTrace();
}
}
/**
* 移动文件到指定目录
* @param oldPath String 如:c:/fqf.txt
* @param newPath String 如:d:/fqf.txt
*/
public void moveFile(String oldPath, String newPath) {
copyFile(oldPath, newPath);
delFile(oldPath);
}
/**
* 移动文件到指定目录
* @param oldPath String 如:c:/fqf.txt
* @param newPath String 如:d:/fqf.txt
*/
public void moveFolder(String oldPath, String newPath) {
copyFolder(oldPath, newPath);
delFolder(oldPath);
}
public static void main(String[] args) {
CopyFile file = new CopyFile();
// file.newFolder("newFolder22222");
file.newFile("test.txt","fdsfdsfdsfs");
}
// 拷贝文件
private void copyFile2(String source, String dest) {
try {
File in = new File(source);
File out = new File(dest);
FileInputStream inFile = new FileInputStream(in);
FileOutputStream outFile = new FileOutputStream(out);
byte[] buffer = new byte[1024];
int i = 0;
while ((i = inFile.read(buffer)) != -1) {
outFile.write(buffer, 0, i);
}//end while
inFile.close();
outFile.close();
}//end try
catch (Exception e) { }//end catch
}//end copyFile}
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;public class Test {
public static void main(String[] args) {
copyFile("f:/a.txt", "f:/b.txt");
}
public static void copyFile(String srcFile, String destFile) {
FileInputStream is = null;
FileOutputStream os = null;
FileChannel fin = null;
FileChannel fout = null;
try {
is = new FileInputStream(srcFile);
os = new FileOutputStream(destFile);
fin = is.getChannel();
fout = os.getChannel();
fin.transferTo(0, fin.size(), fout);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fin.close();
fout.close();
is.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;public class CopyFile {
PrintStream ps = System.out; /**
* @param args
*/
public static void main(String[] args) {
CopyFile cf = new CopyFile();
try {
cf.copy(System.getProperty("user.dir")
+ "/src/test/file/co.txt",System.getProperty("user.dir")
+ "/src/test/file/py.txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} private void copy(String string, String string2) throws IOException {
// open file
// ps.println(System.getProperties());
FileInputStream fi = new FileInputStream(string);
FileOutputStream fo = new FileOutputStream(string2);
// read file
FileChannel fc = fi.getChannel();
byte[] b = new byte[(int) fc.size()];
ByteBuffer bf = ByteBuffer.wrap(b);
fc.read(bf);
// write into destination file
fo.write(bf.array());
// close stream
fi.close();
}}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;public class CopyFile {
PrintStream ps = System.out; /**
* @param args
*/
public static void main(String[] args) {
CopyFile cf = new CopyFile();
try {
cf.copy(System.getProperty("user.dir")
+ "/src/test/file/co.txt",System.getProperty("user.dir")
+ "/src/test/file/py.txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} private void copy(String string, String string2) throws IOException {
// open file
// ps.println(System.getProperties());
FileInputStream fi = new FileInputStream(string);
FileOutputStream fo = new FileOutputStream(string2);
// read file
FileChannel fc = fi.getChannel();
byte[] b = new byte[(int) fc.size()];
ByteBuffer bf = ByteBuffer.wrap(b);
fc.read(bf);
// write into destination file
fo.write(bf.array());
// close stream
fi.close();
fo.close();
}}