我有一个txt文件中的文件名列表。
比如A、B、C、D
现在我知道文件列表存在于C:/data/
中。这个数据文件夹还包含其他文件,如A、、B、C、D、A1、B1等。现在我想将这些A、B、C、D文件从C:/data/
复制到C:/dataOne/
我有一个java代码,它只将一个文件从一个位置复制到另一个位置。但我有txt
文件中的文件名列表。
这就是我尝试过的。
public static void main(String[] args)
{
InputStream inStream = null;
OutputStream outStream = null;
try{
File afile =new File("C:\folderA\A.txt");
File bfile =new File("C:\folderB\A.txt");
inStream = new FileInputStream(afile);
outStream = new FileOutputStream(bfile);
byte[] buffer = new byte[1024];
int length;
//copy the file content in bytes
while ((length = inStream.read(buffer)) > 0){
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
System.out.println("File is copied successful!");
}catch(IOException e){
e.printStackTrace();
}
}
我的.txt
文件中有大约100个文件名。
如何将100个文件从一个位置复制到另一个位置。
如果使用Java 7或更高版本,则可以执行此操作:
final Path srcdir = Paths.get("C:\data");
final Path dstdir = Paths.get("C:\dataOne");
for (final Path path: Files.newDirectoryStream(srcdir))
Files.copy(path, dstdir.resolve(path.getFileName()));
如果不想复制所有文件,可以使用DirectoryStream.Filter
筛选DirectoryStream
。
如果要复制的文件名在一个文件中,请执行以下操作:
final Path fileNames = Paths.get("filewithfilenames");
final List<String> allFilesByName
= Files.readAllLines(fileNames, StandardCharsets.UTF_8);
然后使用CCD_ 8从CCD_。根据这些路径是相对路径还是绝对路径,您可能必须使用.resolve()
来对抗srcdir
。
Java 8使这变得更加容易,因为它有一个Files.lines()
;这意味着你可以从.map()
到Path
,然后是.forEach()
路径,你会得到Files.copy()
。
查看此代码。将包含所有文件的整个文件夹从源复制到目标。
import java.io.*;
public class copydir
{
public static void main(String args[])
{
File srcFolder = new File("E://Paresh/programs/test");
File destFolder = new File("D://paresh");
if(!srcFolder.exists())
{
System.out.println("Directory does not exist.");
//just exit
System.exit(0);
}
else{
try{
copyDirectory(srcFolder,destFolder);
}
catch(IOException e)
{
e.printStackTrace();
//error, just exit
System.exit(0);
}
}
System.out.println("Done");
}
public static void copyDirectory(File src , File target) throws IOException
{
if (src.isDirectory())
{
if (!target.exists())
{
target.mkdir();
}
String[] children = src.list();
for (int i=0; i<children.length; i++)
{
copyDirectory(new File(src, children[i]),new File(target, children[i]));
}
}
// if Directory exists then only files copy
else
{
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(target);
// Copy the bits from instream to outstream
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
}
in.close();
out.close();
}
}
}
欢迎