導航:首頁 > 編程語言 > javaio文件復制

javaio文件復制

發布時間:2025-07-04 18:49:09

java我用流來復制文件可是老是拒絕訪問怎麼回事

兄弟,首先window環境下文件目錄是不能用Java流來讀取的,目錄是使用mkdir或者mkdirs方法創建的。
第二你復制的時候BufferedInputStream的read() 每次是讀取一個位元組,你用int來接收,這樣會隱式轉型成4個位元組,復制的文件會不對。
第三文件讀取的截至調試是返回的 -1 , 不是 1,也不是0
第四當然能正確關閉流這是對的,但是緩存流關閉流的時候,並沒有關閉FileInputStream和FileOutputStream,所以建議在關閉緩存流之前先關閉掉FileInputStream和FileOutputStream。
文件復制我是這么寫的:
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class MyFile extends File {
private List<MyFile> childFiles;

public MyFile(String pathname) {
super(pathname);
}

public MyFile(File file) {
super(file.getAbsolutePath());
}
public List<MyFile> getChildFiles() {
return childFiles;
}
public void setChildFiles(List<MyFile> childFiles) {
this.childFiles = childFiles;
}

}
------------------------------------------------------------------------------

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class TestFile {
@Test
public void fileTest() {
MyFile myFile = new MyFile("D:\\迅雷下載");
getAllChildFiles(myFile);
printFile(myFile);
}
@Test
public void FileTest() {
MyFile srcFile = new MyFile("D:\\迅雷下載\\activiti-6.0.0");
MyFile targetFile = new MyFile("D:\\迅雷下載\\activiti-6.0.1");
try {
getAllChildFiles(srcFile);
File(srcFile,targetFile);
} catch (Exception e) {
e.printStackTrace();
}
}

public void getAllChildFiles(MyFile myFile) {
myFile.setWritable(true,true);
File[] files = myFile.listFiles();
List<MyFile> childFiles = new ArrayList<MyFile>();
for (File file : files) {
MyFile mf = new MyFile(file);
childFiles.add(mf);
if(mf.isDirectory()) {
getAllChildFiles(mf);
}
}
myFile.setChildFiles(childFiles);
}

public void printFile(MyFile myFile) {
System.out.println(myFile.getAbsolutePath());
System.out.println("====>"+myFile.getName());
List<MyFile> childFiles = myFile.getChildFiles();
if(childFiles != null && childFiles.size() > 0) {
for (MyFile mf : childFiles) {
printFile(mf);
}
}
}

public void File(MyFile srcFile,MyFile targetFile) throws Exception {
if(srcFile.isDirectory()) {
targetFile.mkdirs();
}else {
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
int len = 0;
while((len = fis.read(buffer)) != -1) {
fos.write(buffer,0,len);
}
fis.close();
fos.close();
}
List<MyFile> srcChildFiles = srcFile.getChildFiles();
List<MyFile> targetChidFiles = new ArrayList<MyFile>();
if(srcChildFiles != null && srcChildFiles.size() > 0) {
for (MyFile srcf : srcChildFiles) {
StringBuilder targFilePath = new StringBuilder(targetFile.getAbsolutePath());
targFilePath.append(MyFile.separator).append(srcf.getName());
System.out.println(targFilePath.toString());
MyFile targf = new MyFile(targFilePath.toString());
targetChidFiles.add(targf);
File(srcf,targf);
}
}
targetFile.setChildFiles(targetChidFiles);
}

}
希望能幫助到你,謝謝!!

㈡ Java代碼拷貝文件夾 注:復制文件夾

Java代碼復制文件夾時,則需要利用Flie類在目標文件夾中創建相應的目錄,並且使用遞歸方法,代碼如下:

importjava.io.*;
/**
*復制文件夾或文件夾
*/
publicclassCopyDirectory{
//源文件夾
staticStringurl1="F:/photos";
//目標文件夾
staticStringurl2="D:/tempPhotos";
publicstaticvoidmain(Stringargs[])throwsIOException{
//創建目標文件夾
(newFile(url2)).mkdirs();
//獲取源文件夾當前下的文件或目錄
File[]file=(newFile(url1)).listFiles();
for(inti=0;i<file.length;i++){
if(file[i].isFile()){
//復制文件
File(file[i],newFile(url2+file[i].getName()));
}
if(file[i].isDirectory()){
//復制目錄
StringsourceDir=url1+File.separator+file[i].getName();
StringtargetDir=url2+File.separator+file[i].getName();
Directiory(sourceDir,targetDir);
}
}
}
//復制文件
publicstaticvoidFile(FilesourceFile,FiletargetFile)
throwsIOException{
//新建文件輸入流並對它進行緩沖
FileInputStreaminput=newFileInputStream(sourceFile);
BufferedInputStreaminBuff=newBufferedInputStream(input);

//新建文件輸出流並對它進行緩沖
FileOutputStreamoutput=newFileOutputStream(targetFile);
BufferedOutputStreamoutBuff=newBufferedOutputStream(output);

//緩沖數組
byte[]b=newbyte[1024*5];
intlen;
while((len=inBuff.read(b))!=-1){
outBuff.write(b,0,len);
}
//刷新此緩沖的輸出流
outBuff.flush();

//關閉流
inBuff.close();
outBuff.close();
output.close();
input.close();
}
//復制文件夾
publicstaticvoidDirectiory(StringsourceDir,StringtargetDir)
throwsIOException{
//新建目標目錄
(newFile(targetDir)).mkdirs();
//獲取源文件夾當前下的文件或目錄
File[]file=(newFile(sourceDir)).listFiles();
for(inti=0;i<file.length;i++){
if(file[i].isFile()){
//源文件
FilesourceFile=file[i];
//目標文件
FiletargetFile=newFile(newFile(targetDir).getAbsolutePath()+File.separator+file[i].getName());
File(sourceFile,targetFile);
}
if(file[i].isDirectory()){
//准備復制的源文件夾
Stringdir1=sourceDir+"/"+file[i].getName();
//准備復制的目標文件夾
Stringdir2=targetDir+"/"+file[i].getName();
Directiory(dir1,dir2);
}
}
}
}

㈢ java文件復制(bufferedreader讀取一個文件內容,用bufferedwriter 寫入到另一個文件)

可以通過BufferedReader 流的形式進行流讀取,之後通過readLine方法獲取到每行的內容,之後通過bufferedwriter (如:OutputStreamWriter)。
BufferedReader bre = null;
OutputStreamWriter pw = null;//定義一個流
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此時獲取到的bre就是整個文件的緩存流
pw = new OutputStreamWriter(new FileOutputStream(「D:/test.txt」),"GBK");//確認流的輸出文件和編碼格式,此過程創建了「test.txt」實例
while ((str = bre.readLine())!= null) // 判斷最後一行不存在,為空結束循環
{
pw.write(str );//將要寫入文件的內容,寫入到新文件
};
pw.close();//關閉流
bre .close();//關閉流
備註:文件流用完之後必須及時通過close方法關閉,否則會一直處於打開狀態,直至程序停止,增加系統負擔。

㈣ 請問把java安裝以後的整個文件夾復制到別的電腦裡面能用嗎

不可能,一定要 安裝,他會修改IE和系統的某些屬性,所以要完全安裝
你下載的100多M可能是JDK,在公司用JDK是要開發,難道作為一個程序員你們公司連JDK都不讓你們裝那你們怎麼編程
如果你不是程序員只是要用一些JAVA程序那麼可以不裝
WINDOWS默認帶有JRE可以執行JAVA程序
(JRE是執行JAVA程序,JDK是JAVA變成用的環境)

閱讀全文

與javaio文件復制相關的資料

熱點內容
精品源碼交易靠譜點的平台 瀏覽:288
linux系統後門 瀏覽:411
軟體顯示無法連接到遠程伺服器怎麼辦 瀏覽:916
小衛星鍋加密 瀏覽:208
按鍵手機版熱更新源碼 瀏覽:656
怎麼拷貝加密門禁卡到手機 瀏覽:917
ghost壓縮系統 瀏覽:807
程序員電腦圖片簡筆畫 瀏覽:102
添加uboot命令 瀏覽:632
ue4編譯速度掃描磁碟 瀏覽:827
下載小說和文件夾 瀏覽:137
杭州上城編程入門 瀏覽:865
我的世界如何玩伺服器多人 瀏覽:554
linuxtopcpu100 瀏覽:405
命令分兩種 瀏覽:666
linuxnfs搭建 瀏覽:267
有什麼買工具的app 瀏覽:855
集群伺服器如何批量管理 瀏覽:12
命令行等待 瀏覽:230
vivo手機如何看加密照片 瀏覽:938