从文本创建文件夹

时间:2015-07-20 05:50:32

标签: java

我正在

newDir D:\template_export\template\attachments\processed\enumeration\blocker.gif\enumeration\critical.gif\enumeration\high.gif\enumeration\low.gif\enumeration\major.gif\enumeration\medium.gif\enumeration\minor.gif\enumeration\normal.gif\enumeration\unassigned.gif\enumeration\unassigned2.gif\workflow\close.gif\workflow\defer.gif\workflow\duplicate.gif\workflow\inprogress.gif\workflow\new.gif\workflow\open.gif\workflow\reject.gif\workflow\remind.gif\workflow\reopen.gif\workflow\resolve.gif\workflow\unconfigure.gif\workflow\unresolve.gif\workflow\verify.gif\workflow\wontdo.gif\workflow\works.gif\workitemtype\bug.gif\workitemtype\enhancement.gif\workitemtype\general.gif\workitemtype\task.gif\workitemtype
new directory false
reached
java.nio.file.NoSuchFileException: D:\template_export\template\attachments\1.gif -> D:\template_export\template\attachments\processed\enumeration\blocker.gif\enumeration\critical.gif\enumeration\high.gif\enumeration\low.gif\enumeration\major.gif\enumeration\medium.gif\enumeration\minor.gif\enumeration\normal.gif\enumeration\unassigned.gif\enumeration\unassigned2.gif\workflow\close.gif\workflow\defer.gif\workflow\duplicate.gif\workflow\inprogress.gif\workflow\new.gif\workflow\open.gif\workflow\reject.gif\workflow\remind.gif\workflow\reopen.gif\workflow\resolve.gif\workflow\unconfigure.gif\workflow\unresolve.gif\workflow\verify.gif\workflow\wontdo.gif\workflow\works.gif\workitemtype\bug.gif\workitemtype\enhancement.gif\workitemtype\general.gif\workitemtype\task.gif\workitemtype\unknown.gifprocess_template_license.htmltemplate.messagestemplate_en_US.messages
    at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsFileCopy.move(Unknown Source)
    at sun.nio.fs.WindowsFileSystemProvider.move(Unknown Source)
    at java.nio.file.Files.move(Unknown Source)
    at Test.main(Test.java:60)
Error.

我的代码是:

public class Test {
    public static void main(String[] args) {
        File orgDirectory = new File("D://template_export/template/attachments"); // replace this filename 
        // with the path to the folder 
        // that contains the original images

        String fileContent = "";
        try (BufferedReader br = new BufferedReader(new FileReader(new File(orgDirectory, "attachments.txt")))) {
            for (String line;
            (line = br.readLine()) != null;) {
                fileContent += line;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        String[] newLocations = fileContent.split(",");
        File[] orgFiles = orgDirectory.listFiles(new FileFilter() {@Override
            public boolean accept(File pathname) {
                return pathname.getPath().endsWith(".gif");
            }
        });
        File destinationFolder = new File("D://template_export/template/attachments/processed");
        if (!destinationFolder.exists()) {

            System.out.println("here" + destinationFolder.mkdir());
        }
        int max = Math.min(orgFiles.length, newLocations.length);
        for (int i = 0; i < max; i++) {
            String newLocation = newLocations[i];
            int lastIndex = newLocation.lastIndexOf("/");
            if (lastIndex == -1) {
                continue;
            }
            String newDirName = newLocation.substring(0, lastIndex);
            System.out.println("newDirName " + newDirName);

            String newName = newLocation.substring(lastIndex);
            System.out.println("newName " + newName);

            File newDir = new File(destinationFolder, newDirName);
            System.out.println("newDir " + newDir);

            if (!newDir.exists()) {
                System.out.println("new directory " + newDir.mkdir());
            }
            try {
                System.out.println("reached");

                Files.move(orgFiles[i].toPath(), new File(newDir, newName).toPath(), StandardCopyOption.REPLACE_EXISTING);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您将attachments.txt文件的所有行连接成一个目标字符串。从异常消息判断,附件文件似乎在每行末尾都不包含逗号。因此,您最终会得到一个由单个文件名组成的目标,似乎位于一个深层嵌套的目录中。

相反,我建议您一次一行地读取一行ArrayList<String>,而不是连接并稍后拆分目的地。

ArrayList<String> newLocations = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(new File(orgDirectory, "attachments.txt")))) {
    for (String line; (line = br.readLine()) != null;) {
        newLocations.add(line);
    }
} catch (Exception e) {
    e.printStackTrace();
}

然后,您可以使用newLocations.size(),现在使用newLocations.length,并使用newLocations.get(i)使用newLocations[i]

编辑:正如@griFlo在评论中指出的那样,将文件读入行列表的更简单的替代方法是:

List<String> newLocations = Files.readAllLines(Paths.get("attachments.txt"));

如果使用UTF-8解码无法正确读取文件(这是上面的调用将使用的),或者如果您正在使用Java 7进行编译,那么您将不得不使用双参数版本readAllLines()

List<String> newLocations = Files.readAllLines(Paths.get("attachments.txt"),
    StandardCharsets.US_ASCII); // or whatever encoding is appropriate