java复制文件先关闭什么流 java 输入输出流的复制文件的问题
大家好,今天小编来为大家解答以下的问题,关于java复制文件先关闭什么流,java 输入输出流的复制文件的问题这个很多人还不知道,现在让我们一起来看看吧!
JAVA怎么将一个图片复制到文件夹中去
JDK宝典里有这样的一段代码,你调用copyFile方法就可以了:
/**
*复制单个文件,如果目标文件存在,则不覆盖。
*@param srcFileName待复制的文件名
*@param destFileName目标文件名
*@return如果复制成功,则返回true,否则返回false
*/
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 输入输出流的复制文件的问题的内容到此结束了,希望对大家有所帮助。