使用 Files.move 创建新的 "file" 文件类型而不是将文件移动到目录
Using the Files.move creates a new "file" file type rather than moving the file to a directory
我正在尝试制作一个程序,从那里的各个文件夹中提取多个 MP4 文件,并将它们放在一个已经创建的文件夹中(代码已略有更改,因此它不会再弄乱任何 MP4 文件,而不是虚拟文本文件)。
我已经设法列出了指定文件夹中的所有 folders/files,但是我无法将它们移动到目录。
static File dir = new File("G:\New Folder");
static Path source;
static Path target = Paths.get("G:\gohere");
static void showFiles(File files[]) {
for (File file : files) { // Loops through each file in the specified directory in "dir" variable.
if (file.isDirectory()) { // If the file is a directory.
File[] subDir = file.listFiles(); // Store each file in a File list.
for (File subFiles : subDir) { // Loops through the files in the sub-directory.
if (subFiles.getName().endsWith(".mp4")) { // if the file is of type MP4
source = subFiles.toPath(); // Set source to be the abs path to the file.
System.out.println(source);
try {
Files.move(source, target);
System.out.println("File Moved");
} catch (IOException e) {
e.getMessage();
}
}
}
} else {
source = file.toPath(); // abs path to file
try {
Files.move(source, target);
System.out.println("File moved - " + file.getName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
showFiles(dir.listFiles());
}
问题是当我将文件从源文件夹移动到目标文件夹时,它会删除或转换目标文件夹。
Files.move
不像命令行。你在编程。你必须把事情说清楚。您实际上是在要求 Files.move
这样做,以便 target
(此处为 G:\GoHere
)从此成为您要移动的文件的位置。如果您打算:不,目标是 G:\GoHere\TheSameFileName
那么您必须对此进行编程。
另外,您的代码一团糟。停止同时使用 java.io.File
和 java.nio.Path
。选择一方(选择 java.nio
一方,这是一个较新的 API 有充分理由的),不要混搭。
例如:
Path fromDir = Paths.get("G:\FromHere");
Path targetDir = Paths.get(G:\ToHere");
try (DirectoryStream ds = Files.newDirectoryStream(fromDir)) {
for (Path child : ds) {
if (Files.isRegularFile(child)) {
Path targetFile = targetDir.resolve(child.getFileName());
Files.move(child, targetFile);
}
}
}
resolve
给你一个 Path
对象,这是你在这里需要的:目标目录中的实际文件。
我正在尝试制作一个程序,从那里的各个文件夹中提取多个 MP4 文件,并将它们放在一个已经创建的文件夹中(代码已略有更改,因此它不会再弄乱任何 MP4 文件,而不是虚拟文本文件)。
我已经设法列出了指定文件夹中的所有 folders/files,但是我无法将它们移动到目录。
static File dir = new File("G:\New Folder");
static Path source;
static Path target = Paths.get("G:\gohere");
static void showFiles(File files[]) {
for (File file : files) { // Loops through each file in the specified directory in "dir" variable.
if (file.isDirectory()) { // If the file is a directory.
File[] subDir = file.listFiles(); // Store each file in a File list.
for (File subFiles : subDir) { // Loops through the files in the sub-directory.
if (subFiles.getName().endsWith(".mp4")) { // if the file is of type MP4
source = subFiles.toPath(); // Set source to be the abs path to the file.
System.out.println(source);
try {
Files.move(source, target);
System.out.println("File Moved");
} catch (IOException e) {
e.getMessage();
}
}
}
} else {
source = file.toPath(); // abs path to file
try {
Files.move(source, target);
System.out.println("File moved - " + file.getName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
showFiles(dir.listFiles());
}
问题是当我将文件从源文件夹移动到目标文件夹时,它会删除或转换目标文件夹。
Files.move
不像命令行。你在编程。你必须把事情说清楚。您实际上是在要求 Files.move
这样做,以便 target
(此处为 G:\GoHere
)从此成为您要移动的文件的位置。如果您打算:不,目标是 G:\GoHere\TheSameFileName
那么您必须对此进行编程。
另外,您的代码一团糟。停止同时使用 java.io.File
和 java.nio.Path
。选择一方(选择 java.nio
一方,这是一个较新的 API 有充分理由的),不要混搭。
例如:
Path fromDir = Paths.get("G:\FromHere");
Path targetDir = Paths.get(G:\ToHere");
try (DirectoryStream ds = Files.newDirectoryStream(fromDir)) {
for (Path child : ds) {
if (Files.isRegularFile(child)) {
Path targetFile = targetDir.resolve(child.getFileName());
Files.move(child, targetFile);
}
}
}
resolve
给你一个 Path
对象,这是你在这里需要的:目标目录中的实际文件。