最簡(jiǎn)單的io流問(wèn)題,不用什么高手,
創(chuàng)新互聯(lián)公司技術(shù)團(tuán)隊(duì)10多年來(lái)致力于為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、成都全網(wǎng)營(yíng)銷(xiāo)、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過(guò)多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了成百上千家網(wǎng)站,包括各類(lèi)中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。
我給你寫(xiě)個(gè)方法,參數(shù)是2個(gè)字符串,第一個(gè)寫(xiě)原文件的全路徑,第二個(gè)寫(xiě)目標(biāo)文件的全路進(jìn)。 你試試吧
public void copy(String fromFilePath, String toFilePath) {
try {
FileInputStream fis = new FileInputStream(fromFilePath);
FileOutputStream fos = new FileOutputStream(toFilePath);
byte[] b = new byte[100];
try {
while (fis.read(b) != (-1)) {
fos.write(b);
}
if (fis != null) {
fis.close();
fis = null;
}
if (fos != null) {
fos.flush();
fos.close();
fos = null;
}
} catch (IOException e) {
System.out.println("io異常");
}
} catch (FileNotFoundException e) {
System.out.println("源文件不存在");
}
public static void main(String[] args) {
//自己把路徑補(bǔ)齊,別忘了!?。。。。。。。。。。。。。?!
String fromFilePath=" "; // 源文件的全路徑。 比方"d://myphoto//nihao.mp3"
String toFilePath=" "; //目標(biāo)文件的全路勁。 如果不存在會(huì)自動(dòng)建立,如存在則在文件尾繼續(xù)添加
new CopyTest().copy(fromFilePath, toFilePath);
}
}
通過(guò)輸入輸出流解決此問(wèn)題,具體的可以查看JDK的API,實(shí)在不會(huì)的話,百度一下應(yīng)該都有一堆這方面的代碼。
test.copy("G:\\G盤(pán)寄存資料\\我的文檔1\\音樂(lè)課堂.doc","G:\\G盤(pán)寄存資料");
請(qǐng)注意上面的有個(gè)文件夾名字叫“G盤(pán)寄存資料”,你復(fù)制的文件后的新文件名也叫“G盤(pán)寄存資料”,這樣名字重復(fù)了,所以就出錯(cuò)了。
可以把程序改成這樣的話就行了:
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.io.InputStream;
import java.io.OutputStream;
public class FileCopy {
public void copy(String src, String dest){//**********
InputStream is=null;
OutputStream os=null;
char ch[]=src.toCharArray();
//************新添加的代碼**********
int pos=0;
for(int i=ch.length-1;i=0;i--)
{
if(ch[i]=='\\')
{
if(ipos)
pos=i;
}
}
String temp=src.substring(pos);
dest=dest+temp;
System.out.println("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=is.read(b))!=-1){
os.write(b,0,len);
}
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(is!=null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
FileCopy test=new FileCopy();
test.copy("G:\\G盤(pán)寄存資料\\我的文檔1\\hello.txt","G:\\G盤(pán)寄存資料");//++++++++++++++++++++++
}
}
Java代碼復(fù)制文件夾時(shí),則需要利用Flie類(lèi)在目標(biāo)文件夾中創(chuàng)建相應(yīng)的目錄,并且使用遞歸方法,代碼如下:
import?java.io.*;??
/**?
*?復(fù)制文件夾或文件夾?
*/??
public?class?CopyDirectory?{??
//?源文件夾???
static?String?url1?=?"F:/photos";??
//?目標(biāo)文件夾???
static?String?url2?=?"D:/tempPhotos";??
public?static?void?main(String?args[])?throws?IOException?{??
//?創(chuàng)建目標(biāo)文件夾???
(new?File(url2)).mkdirs();??
//?獲取源文件夾當(dāng)前下的文件或目錄???
File[]?file?=?(new?File(url1)).listFiles();??
for?(int?i?=?0;?i??file.length;?i++)?{??
if?(file[i].isFile())?{??
//?復(fù)制文件???
copyFile(file[i],new?File(url2+file[i].getName()));??
}??
if?(file[i].isDirectory())?{??
//?復(fù)制目錄???
String?sourceDir=url1+File.separator+file[i].getName();??
String?targetDir=url2+File.separator+file[i].getName();??
copyDirectiory(sourceDir,?targetDir);??
}??
}??
}??
//?復(fù)制文件???
public?static?void?copyFile(File?sourceFile,File?targetFile)???
throws?IOException{??
//?新建文件輸入流并對(duì)它進(jìn)行緩沖???
FileInputStream?input?=?new?FileInputStream(sourceFile);??
BufferedInputStream?inBuff=new?BufferedInputStream(input);??
//?新建文件輸出流并對(duì)它進(jìn)行緩沖???
FileOutputStream?output?=?new?FileOutputStream(targetFile);??
BufferedOutputStream?outBuff=new?BufferedOutputStream(output);??
//?緩沖數(shù)組???
byte[]?b?=?new?byte[1024?*?5];??
int?len;??
while?((len?=inBuff.read(b))?!=?-1)?{??
outBuff.write(b,?0,?len);??
}??
//?刷新此緩沖的輸出流???
outBuff.flush();??
//關(guān)閉流???
inBuff.close();??
outBuff.close();??
output.close();??
input.close();??
}??
//?復(fù)制文件夾???
public?static?void?copyDirectiory(String?sourceDir,?String?targetDir)??
throws?IOException?{??
//?新建目標(biāo)目錄???
(new?File(targetDir)).mkdirs();??
//?獲取源文件夾當(dāng)前下的文件或目錄???
File[]?file?=?(new?File(sourceDir)).listFiles();??
for?(int?i?=?0;?i??file.length;?i++)?{??
if?(file[i].isFile())?{??
//?源文件???
File?sourceFile=file[i];??
//?目標(biāo)文件???
File?targetFile=new?File(new?File(targetDir).getAbsolutePath()+File.separator+file[i].getName());??
copyFile(sourceFile,targetFile);??
}??
if?(file[i].isDirectory())?{??
//?準(zhǔn)備復(fù)制的源文件夾???
String?dir1=sourceDir?+?"/"?+?file[i].getName();??
//?準(zhǔn)備復(fù)制的目標(biāo)文件夾???
String?dir2=targetDir?+?"/"+?file[i].getName();??
copyDirectiory(dir1,?dir2);??
}??
}??
}??
}
復(fù)制粘貼實(shí)際上是文件的流讀取和寫(xiě)入可以通過(guò)如下方法實(shí)現(xiàn):
讀寫(xiě)是兩個(gè)不同的分支,通常都是分開(kāi)單獨(dú)使用的。
可以通過(guò)BufferedReader 流的形式進(jìn)行流緩存,之后通過(guò)readLine方法獲取到緩存的內(nèi)容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此時(shí)獲取到的bre就是整個(gè)文件的緩存流
while ((str = bre.readLine())!= null) // 判斷最后一行不存在,為空結(jié)束循環(huán)
{
System.out.println(str);//原樣輸出讀到的內(nèi)容
};
備注: 流用完之后必須close掉,如上面的就應(yīng)該是:bre.close(),否則bre流會(huì)一直存在,直到程序運(yùn)行結(jié)束。
可以通過(guò)“FileOutputStream”創(chuàng)建文件實(shí)例,之后過(guò)“OutputStreamWriter”流的形式進(jìn)行存儲(chǔ),舉例:
OutputStreamWriter pw = null;//定義一個(gè)流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//確認(rèn)流的輸出文件和編碼格式,此過(guò)程創(chuàng)建了“test.txt”實(shí)例
pw.write("我是要寫(xiě)入到記事本文件的內(nèi)容");//將要寫(xiě)入文件的內(nèi)容,可以多次write
pw.close();//關(guān)閉流
備注:文件流用完之后必須及時(shí)通過(guò)close方法關(guān)閉,否則會(huì)一直處于打開(kāi)狀態(tài),直至程序停止,增加系統(tǒng)負(fù)擔(dān)。
使用Java語(yǔ)言如何實(shí)現(xiàn)快速文件復(fù)制:
代碼:
import java.io.File;
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){
long start = System.currentTimeMillis();
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
FileChannel inFileChannel = null;
FileChannel outFileChannel = null;
try {
fileInputStream = new FileInputStream(new File("C:\\from\\不是鬧著玩的.flv"));
fileOutputStream = new FileOutputStream(new File("C:\\to\\不是鬧著玩的.flv"));
inFileChannel = fileInputStream.getChannel();
outFileChannel = fileOutputStream.getChannel();
inFileChannel.transferTo(0, inFileChannel.size(), outFileChannel);//連接兩個(gè)通道,從in通道讀取數(shù)據(jù)寫(xiě)入out通道。
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(fileInputStream != null){
fileInputStream.close();
}
if(inFileChannel != null){
inFileChannel.close();
}
if(fileOutputStream != null){
fileOutputStream.close();
}
if(outFileChannel != null){
outFileChannel.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.out.println("視頻文件從“from”文件夾復(fù)制到“to”文件需要" + (end - start) + "毫秒。");
}
}