public class CopyFile {
public static void main(String[] args) {
try{
FileInputStream input=new FileInputStream("f:\\downloads\\konjpg");//可替换为任何路径何和文件名
FileOutputStream output=new FileOutputStream("f:\\konjpg");//可替换为任何路径何和文件名
int in=inputread();
while(in!=-1){
outputwrite(in);
in=inputread();
}
}catch (IOException e){
Systemoutprintln(etoString());
}
}
}你写的两个程序都不太严谨,我给你写一个复制文件和复制文件夹的标准例子吧。
//复制文件
package comcddfile;
import javaio;
public class FileText {
public static void main(String[] args) {
String sfpath = "E://wordtxt"; // 指定文件地址
String dfpath = "F://wordtxt";
File sFile = new File(sfpath); // 创建文件对象
File dFile = new File(dfpath);
try {
dFilecreateNewFile(); // 新建文件
FileInputStream fis = new FileInputStream(sFile);
FileOutputStream fout = new FileOutputStream(dFile);
byte[] date = new byte[512]; // 创建字节数组
int rs = -1;
while ((rs = fisread(date)) > 0) { // 循环读取文件
foutwrite(date, 0, rs); // 向文件写数据
}
foutclose();
fisclose(); // 关闭流
Systemoutprintln("文件复制成功");
} catch (Exception e) {
eprintStackTrace();
}
}
}
//复制文件夹
package comcddutil;
import javaio;
public class FileUtil {
private static void copy(File[] files, File d) {
if (!dexists()) //如果指定目录不存在
dmkdir(); //创建目录
for (int i = 0; i < fileslength; i++) { //循环遍历要复制的文件夹
if (files[i]isFile()) { //如果文件夹中是文件
try {
FileInputStream fis = new FileInputStream(files[i]); //创建FileInputStream对象
FileOutputStream out = new FileOutputStream(new File(d
getPath()
+ Fileseparator + files[i]getName())); //复制后文件的保存路径
int count = fisavailable();
byte[] data = new byte[count];
if ((fisread(data)) != -1) { //读取文件
outwrite(data); //将读取的信息写入文件中
}
outclose(); //关闭流
fisclose();
} catch (Exception e) {
eprintStackTrace();
}
}
if (files[i]isDirectory()) { //如果文件夹中是一个路径
File des = new File(dgetPath() + Fileseparator
+ files[i]getName()); //在复制后路径中创建子文件夹
desmkdir();
copy(files[i]listFiles(), des); //再次调用本方法
}
}
Systemoutprintln("文件夹复制成功");
}
public static void main(String[] args) {
File sourFile = null, desFile = null;
String sourFolder = "E://word"; //指定要进行复制的文件夹
String desFolder = "E://copy"; //指定复制后的文件夹地址
sourFile = new File(sourFolder);
if (!sourFileisDirectory() || !sourFileexists()) { //如果原文件夹不存在
Systemoutprintln("原文件夹不存在");
}
desFile = new File(desFolder);
desFilemkdir();
copy(sourFilelistFiles(), desFile); //调用文件夹复制方法
}
}
下面是我学习过程中总结的几个复制文件的方法,代码如下:
/复制媒体文件,该例子是复制1mp3文件,列出了四种方式
/
import javaioBufferedInputStream;
import javaioBufferedOutputStream;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioFileOutputStream;
import javaioIOException;
public class BufferedStreamCopyFiles {
public static void main(String[] args) throws IOException {
/
共有四个方法,但建议用demo1,demo2;因为demo3需要创建数组, 如果文件大,光创建数组就需要很多时间;demo4一定也不要用,
效率非常慢
/
demo1();
demo2();
demo3();
demo4();
}
public static void demo1() throws FileNotFoundException, IOException {
FileInputStream fis = new FileInputStream("d:\\1mp3");
FileOutputStream fos = new FileOutputStream("d:\\01mp3");
int len = 0;
byte[] buf = new byte[1024];
while ((len = fisread(buf)) != -1) {
foswrite(buf, 0, len);
}
fisclose();
fosclose();
}
public static void demo2() throws IOException {
FileInputStream fis = new FileInputStream("d:\\1mp3");
BufferedInputStream bufis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("d:\\02mp3");
BufferedOutputStream bufos = new BufferedOutputStream(fos);
int len = 0;
while ((len = bufisread()) != -1) {
bufoswrite(len);
}
bufisclose();
bufosclose();
}
// 不建议这种方式
public static void demo3() throws IOException {
FileInputStream fis = new FileInputStream("d:\\1mp3");
FileOutputStream fos = new FileOutputStream("d:\\03mp3");
byte[] buf = new byte[fisavailable()];
fisread(buf);
foswrite(buf);
fosclose();
fisclose();
}
public static void demo4() throws IOException {
FileInputStream fis = new FileInputStream("d:\\1mp3");
FileOutputStream fos = new FileOutputStream("d:\\04mp3");
int ch = 0;
while ((ch = fisread()) != -1) {
foswrite(ch);
}
fosclose();
fisclose();
}
}renameTo(File dest) 方法 的作用是,重新命名此抽象路径名表示的文件
你用这个只是将该文件换了一个路径,也就是换了一个位置而已,并不是复制。
你要复制的话,貌似只能新建一个文件,该文件的路径是将原文件复制到的路径;然后将旧文件的内容读出来,写入到新文件中去,这样就实现了文件的复制java将一个文件夹下的所有文件复制到另一个文件夹下
import javaioFile;
import javaioFileInputStream;
import javaioFileOutputStream;
public class selfcopy {
public void IOCopy(String path,String path1){
File file = new File(path);
File file1 = new File(path1);
if(!fileexists()){
Systemoutprintln(filegetName()+"文件不存在");
}else{
Systemoutprintln("存在");
}
byte[] b = new byte[(int) filelength()];
if(fileisFile()){
try {
FileInputStream is= new FileInputStream(file);
FileOutputStream ps= new FileOutputStream(file1);
isread(b);
pswrite(b);
} catch (Exception e) {
eprintStackTrace();
}
}else if(fileisDirectory()){
if(!fileexists())
filemkdir();
String[] list = filelist();
for(int i=0;i<listlength;i++){
thisIOCopy(path+"/"+list[i], path1+"/"+list[i]);
}
}
}
public static void main(String args[]){
new selfcopy()IOCopy("D:\\device","D:\\TDDOWNLOAD");
}
}testcopy("G:\\G盘寄存资料\\我的文档1\\音乐课堂doc","G:\\G盘寄存资料");
请注意上面的有个文件夹名字叫“G盘寄存资料”,你复制的文件后的新文件名也叫“G盘寄存资料”,这样名字重复了,所以就出错了。
可以把程序改成这样的话就行了:
import javaioBufferedInputStream;
import javaioBufferedOutputStream;
import javaioFile;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioFileOutputStream;
import javaioIOException;
import javaioInputStream;
import javaioOutputStream;
public class FileCopy {
public void copy(String src, String dest){//
InputStream is=null;
OutputStream os=null;
char ch[]=srctoCharArray();
//新添加的代码
int pos=0;
for(int i=chlength-1;i>=0;i--)
{
if(ch[i]=='\\')
{
if(i>pos)
pos=i;
}
}
String temp=srcsubstring(pos);
dest=dest+temp;
Systemoutprintln("dest="+dest);
//
try {
is=new BufferedInputStream(new FileInputStream(src));
os=new BufferedOutputStream(new FileOutputStream(dest));
byte[] b=new byte[256];
int len=0;
String str=null;
StringBuilder sb=new StringBuilder();
try {
while((len=isread(b))!=-1){
oswrite(b,0,len);
}
osflush();
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}finally{
if(is!=null){
try {
isclose();
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
} catch (FileNotFoundException e) {
eprintStackTrace();
}finally{
if(os!=null){
try {
osclose();
} catch (IOException e) {
eprintStackTrace();
}
}
}
}
public static void main(String[] args) {
FileCopy test=new FileCopy();
testcopy("G:\\G盘寄存资料\\我的文档1\\hellotxt","G:\\G盘寄存资料");//++++++++++++++++++++++
}
}import javaioFile;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioFileOutputStream;
import javaioIOException;
public class Copy {
/
@param args
/
public static void main(String[] args) {
// TODO Auto-generated method stub
if(argslength!=2){
Systemoutprint("没有输入正确数目的参数,程序退出!");
Systemexit(0);
}
File fileS = new File("/"+args[0]);
File fileD = new File("/"+args[1]);
if(fileDexists())Systemoutprintln("目标文件 "+args[1]+" 已存在!");
byte[] temp = new byte[50];
int totalSize = 0;
try {
FileInputStream fr = new FileInputStream(fileS);
FileOutputStream fo = new FileOutputStream(fileD);
int length = 0;
while((length = frread(temp, 0, templength)) != -1){
totalSize += length;
fowrite(temp, 0, length);
}
Systemoutprintln("文件 "+args[0]+" 有 "+totalSize+" 个字节");
Systemoutprintln("复制完成!");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
eprintStackTrace();
Systemoutprintln("源文件 "+args[0]+" 不存在!");
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)