首页编程java编程java复制文件先关闭什么流 java 输入输出流的复制文件的问题

java复制文件先关闭什么流 java 输入输出流的复制文件的问题

编程之家2023-10-11116次浏览

大家好,今天小编来为大家解答以下的问题,关于java复制文件先关闭什么流,java 输入输出流的复制文件的问题这个很多人还不知道,现在让我们一起来看看吧!

java复制文件先关闭什么流 java 输入输出流的复制文件的问题

JAVA怎么将一个图片复制到文件夹中去

JDK宝典里有这样的一段代码,你调用copyFile方法就可以了:

/**

*复制单个文件,如果目标文件存在,则不覆盖。

java复制文件先关闭什么流 java 输入输出流的复制文件的问题

*@param srcFileName待复制的文件名

*@param destFileName目标文件名

*@return如果复制成功,则返回true,否则返回false

java复制文件先关闭什么流 java 输入输出流的复制文件的问题

*/

public static boolean copyFile(String srcFileName, String destFileName){

return CopyFileUtil.copyFile(srcFileName, destFileName, false);

}

/**

*复制单个文件

*@param srcFileName待复制的文件名

*@param destFileName目标文件名

*@param overlay如果目标文件存在,是否覆盖

*@return如果复制成功,则返回true,否则返回false

*/

public static boolean copyFile(String srcFileName,

String destFileName, boolean overlay){

//判断原文件是否存在

File srcFile= new File(srcFileName);

if(!srcFile.exists()){

System.out.println("复制文件失败:原文件"+ srcFileName+"不存在!");

return false;

} else if(!srcFile.isFile()){

System.out.println("复制文件失败:"+ srcFileName+"不是一个文件!");

return false;

}

//判断目标文件是否存在

File destFile= new File(destFileName);

if(destFile.exists()){

//如果目标文件存在,而且复制时允许覆盖。

if(overlay){

//删除已存在的目标文件,无论目标文件是目录还是单个文件

System.out.println("目标文件已存在,准备删除它!");

if(!DeleteFileUtil.delete(destFileName)){

System.out.println("复制文件失败:删除目标文件"+ destFileName+"失败!");

return false;

}

} else{

System.out.println("复制文件失败:目标文件"+ destFileName+"已存在!");

return false;

}

} else{

if(!destFile.getParentFile().exists()){

//如果目标文件所在的目录不存在,则创建目录

System.out.println("目标文件所在的目录不存在,准备创建它!");

if(!destFile.getParentFile().mkdirs()){

System.out.println("复制文件失败:创建目标文件所在的目录失败!");

return false;

}

}

}

//准备复制文件

int byteread= 0;//读取的位数

InputStream in= null;

OutputStream out= null;

try{

//打开原文件

in= new FileInputStream(srcFile);

//打开连接到目标文件的输出流

out= new FileOutputStream(destFile);

byte[] buffer= new byte[1024];

//一次读取1024个字节,当byteread为-1时表示文件已经读完

while((byteread= in.read(buffer))!=-1){

//将读取的字节写入输出流

out.write(buffer, 0, byteread);

}

System.out.println("复制单个文件"+ srcFileName+"至"+ destFileName+"成功!");

return true;

} catch(Exception e){

System.out.println("复制文件失败:"+ e.getMessage());

return false;

} finally{

//关闭输入输出流,注意先关闭输出流,再关闭输入流

if(out!= null){

try{

out.close();

} catch(IOException e){

e.printStackTrace();

}

}

if(in!= null){

try{

in.close();

} catch(IOException e){

e.printStackTrace();

}

}

}

}

java 输入输出流的复制文件的问题

可以通过“BufferedReader”读取文件内容,之后通过OutputStreamWriter写入新文件,举例:

OutputStreamWriter pw= null;//定义一个流

pw= new OutputStreamWriter(new FileOutputStream(“D:/testCopy.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”

bre= new BufferedReader(new FileReader("D:/test.txt"));//此时获取到的bre就是整个文件的缓存流

while((str= bre.readLine())!= null)//判断最后一行不存在,为空结束循环

{

pw.write(str);//将要写入文件的内容,可以多次write

};

bre.close();//关闭流

pw.close();//关闭流

备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。

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 copyFileTest(){

MyFile srcFile= new MyFile("D:\\迅雷下载\\activiti-6.0.0");

MyFile targetFile= new MyFile("D:\\迅雷下载\\activiti-6.0.1");

try{

getAllChildFiles(srcFile);

copyFile(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 copyFile(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);

copyFile(srcf,targf);

}

}

targetFile.setChildFiles(targetChidFiles);

}

}

希望能帮助到你,谢谢!!

怎样使用java编程实现文件的剪切/移动

可以通过BufferedReader流的形式进行流读取,之后通过readLine方法获取到的内容,之后通过if判断来实现在某些特定位置的内容的剪切和移动操作。

举例:

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)//判断最后一行不存在,为空结束循环

{

if(str.indexOf("排除")<0){//判断是否需要舍弃

pw.write(str);//将要写入文件的内容,可以多次write

}

}

bre.close();//关闭流

pw.close();//关闭流

解释:以上方法是实现的删除,if中的条件改变下,即可实现其余的功能。

备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。

OK,关于java复制文件先关闭什么流和java 输入输出流的复制文件的问题的内容到此结束了,希望对大家有所帮助。

bbc中文 bbc中文翻译是什么意思r.java文件定义是什么 javar是什么和java什么关系