跟进上一个问题 - Java: How to read directory folder, count and display no of files and copy to another folder?,我想读取一个文件夹,计算文件夹中的文件(任何文件类型),显示文件数,然后将其复制到新文件夹。但是,我得到以下例外:
线程中的异常" main" java.io.FileNotFoundException:C:\ project \ curFolder(访问被拒绝) C:\ project \ newFolder已经存在:继续进程! at java.io.FileInputStream.open(Native Method) 在java.io.FileInputStream。(FileInputStream.java:120) at filetransfer.FileTransfer.copyFiles(FileTransfer.java:54) 在filetransfer.FileTransfer.checkDir(FileTransfer.java:44) 在filetransfer.FileTransfer.readDirectory(FileTransfer.java:29) 在filetransfer.FileTransfer.main(FileTransfer.java:12) Java结果:1 建立成功(总时间:0秒)
请记住我是学生。这是我到目前为止所做的:
public class FileTransfer {
public static void main(String[] args) throws FileNotFoundException, IOException {
readDirectory();
}
public static void readDirectory() throws FileNotFoundException, IOException {
//create new file object with location of folder
File curFolder = new File("C:/project/curFolder/");
int totalFiles = 0;
//for loop to count the files in the directory using listfiles method
for (File file : curFolder.listFiles()) {
//determine if the file object is a file
if (file.isFile()) {
//count files ++
totalFiles++;
}
}
//display number of files in directory
System.out.println("Number of files: " + totalFiles);
checkDir();
}
public static void checkDir() throws FileNotFoundException, IOException {
//check if destination directory exist, if not create directory
//create new file object with copy folder destination
File newFolder = new File("C:/project/newFolder/");
//Check if folder exist: True: Println with message(true and continuing)
if (newFolder.exists()) {
System.out.println(newFolder + " already exist: Continuing with process!");
} else {
//False: Create Dir
newFolder.mkdir();
System.out.println(newFolder + " created!");
}
copyFiles();
}
public static void copyFiles() throws FileNotFoundException, IOException {
//copy files from specified directory to new directory
File fromCur = new File("C:/project/curFolder/");
File toNew = new File("C:/project/newFolder/");
FileInputStream from = null;
FileOutputStream to = null;
try {
from = new FileInputStream(fromCur);
to = new FileOutputStream(toNew);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = from.read(buffer)) != -1) {
to.write(buffer, 0, bytesRead);
}
} finally {
if (from != null) {
try {
from.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
if (to != null) {
try {
to.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}
}
答案 0 :(得分:0)
您要做的是复制文件夹本身,而不是文件夹中的文件。尝试更改copyFiles
方法的这一部分:
File fromCur = new File("C:/project/curFolder/");
File toNew = new File("C:/project/newFolder/");
FileInputStream from = null;
FileOutputStream to = null;
try {
to = new FileOutputStream(toNew);
byte[] buffer = new byte[4096];
int bytesRead;
for (File fileTemp : fromCur.listFiles()) {
if (fileTemp.isFile()) {
from = new FileInputStream(fileTemp);
while ((bytesRead = from.read(buffer)) != -1) {
to.write(buffer, 0, bytesRead);
}
}
}
在循环播放时,这将引用您的文件在文件夹中,而不是文件夹本身。
答案 1 :(得分:0)
错误与以下行有关:
from = new FileInputStream(fromCur);
因为C:\project\curFolder
是文件夹而不是文件。根据{{3}}文档,您看到的例外是正确的。
抛出: FileNotFoundException - 如果文件不存在,是目录而不是常规文件,或者由于某些其他原因无法打开进行阅读。
(我在上面引用的重点)
我相信你可能想要检查输入文件FileInputStream
然后再检查is a directory并逐个复制它们。