java 如何拷贝整个目录,类似xcopy

java 如何拷贝整个目录,类似xcopy,第1张

字数有限制,只给你一个方法吧,大体思路就是递归调用的方式来实现

/**

* 拷贝整个文件目录

* @param source 源目录、文件

* @param destination 目的目录、文件

*/

public static void copyFiles(File source, File destination) {

 if (!source.exists()) {

//Log.warn(source.getAbsolutePath() + " 源文件或源路径不存在")

return

}

if (destination.isFile()) {

//Log.warn(destination.getAbsolutePath() + " 目标不应该是文件, 应该是路径")

return

}

else

destination.mkdirs()

//如果是文件

if (source.isFile()) {

try {

String filename = destination.getAbsolutePath() + File.separator + source.getName()

FileInputStream fis = new FileInputStream(source)

File file = new File(filename)

if (file.exists()) {

file.delete()

}

FileOutputStream fos = new FileOutputStream(file)

if(!StreamHelper.toOutputStream(fis, fos)) {

return

}

fos.close()

fis.close()

Log.debug("复制 " + source.getAbsolutePath() + " 到 " + filename)

return

}catch (IOException ex) {

Log.error(ex)

return

}

}

//如果是目录

else {

File[] files = source.listFiles()

for (int i = 0 i < files.length i++) {

if (files[i].isDirectory()) {

String path = destination.getAbsolutePath() + File.separator + files[i].getName()

File folder = new File(path)

copyFiles(files[i], folder)

}else {

copyFiles(files[i], destination)

}

}

}

}

/**

*

复制单个文件

*

@param

oldPath

String

原文件路径

如:c:/fqf.txt

*

@param

newPath

String

复制后路径

如:f:/fqf.txt

*

@return

boolean

*/

public

void

copyFile(String

oldPath,

String

newPath)

{

try

{

int

bytesum

=

0

int

byteread

=

0

File

oldfile

=

new

File(oldPath)

if

(oldfile.exists())

{

//文件存在时

InputStream

inStream

=

new

FileInputStream(oldPath)

//读入原文件

FileOutputStream

fs

=

new

FileOutputStream(newPath)

byte[]

buffer

=

new

byte[1444]

int

length

while

(

(byteread

=

inStream.read(buffer))

!=

-1)

{

bytesum

+=

byteread

//字节数

文件大小

System.out.println(bytesum)

fs.write(buffer,

0,

byteread)

}

inStream.close()

}

}

catch

(Exception

e)

{

System.out.println("复制单个文件 *** 作出错")

e.printStackTrace()

}

}

/**

*

复制整个文件夹内容

*

@param

oldPath

String

原文件路径

如:c:/fqf

*

@param

newPath

String

复制后路径

如:f:/fqf/ff

*

@return

boolean

*/

public

void

copyFolder(String

oldPath,

String

newPath)

{

try

{

(new

File(newPath)).mkdirs()

//如果文件夹不存在

则建立新文件夹

File

a=new

File(oldPath)

String[]

file=a.list()

File

temp=null

for

(int

i

=

0

i

<

file.length

i++)

{

if(oldPath.endsWith(File.separator)){

temp=new

File(oldPath+file[i])

}

else{

temp=new

File(oldPath+File.separator+file[i])

}

if(temp.isFile()){

FileInputStream

input

=

new

FileInputStream(temp)

FileOutputStream

output

=

new

FileOutputStream(newPath

+

"/"

+

(temp.getName()).toString())

byte[]

b

=

new

byte[1024

*

5]

int

len

while

(

(len

=

input.read(b))

!=

-1)

{

output.write(b,

0,

len)

}

output.flush()

output.close()

input.close()

}

if(temp.isDirectory()){//如果是子文件夹

copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i])

}

}

}

catch

(Exception

e)

{

System.out.println("复制整个文件夹内容 *** 作出错")

e.printStackTrace()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11650460.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存