将新文件保存到任何目录Groovy

时间:2016-12-02 19:02:11

标签: spring groovy

我不断获取文件或目录。我在一个创建Spring应用程序上下文的Groovy脚本中运行。我很容易使用相同类型的路径读取不同的文件。但是,我正在阅读的文件位于Spring的类路径中。此脚本可能由具有不同文件系统的任意数量的人运行,因此我无法对路径进行硬编码。我需要一条相对路径。

这是课堂上面的重要信息。

private static String saveFilesToLocation = "/retrieve/";

这是代码。

    CSVReader reader = new CSVReader(new InputStreamReader(balanceFile), SEPARATOR)
    String[] nextLine
    int counter = 0;
    while ((nextLine = reader.readNext()) != null) {
        counter++
        if (nextLine != null && (nextLine[0] != 'FileLocation') ) {
            counter++;
            try {

                //Remove 0, only if client number start with "0".
                String fileLocation = nextLine[0];

                byte[] fileBytes = documentFileService.getFile(fileLocation);
                if (fileBytes != null) {
                    String fileName = fileLocation.substring(fileLocation.indexOf("/") + 1, fileLocation.length());
                    File file = new File(saveFilesToLocation+fileLocation);
                    file.withOutputStream {
                        it.write fileBytes
                    }

                    println "$counter) Wrote file ${fileLocation} to ${saveFilesToLocation+fileLocation}"
                } else {
                    println "$counter) UNABLE TO RETRIEVE FILE: $fileLocation";
                }

            } catch (Exception e) {
                e.printStackTrace()
            }
        }
    }

Strings中的路径具有我期望的路径,没有多余的字符。

更新:

谢谢loteq你的答案也会起作用,并且比我们的最终结果有更好的时髦性。由于它是一种一种,我们没有时间改变你的更好的版本。

以下是适用于我们的代码,除了saveFilesToLocation设置为现在已存在的目录外,它与上面的代码相同。之前的那个不存在,我们需要像loteq一样调用mkdir 建议。

private static String saveFilesToLocation = "/tmp/retrieve/";


    CSVReader reader = new CSVReader(new InputStreamReader(balanceFile), SEPARATOR)
    String[] nextLine
    int counter = 0;
    while ((nextLine = reader.readNext()) != null) {
        if (nextLine != null && (nextLine[0] != 'FileLocation') ) {
            counter++;
            try {

                //Remove 0, only if client number start with "0".
                String fileLocation = nextLine[0];

                byte[] fileBytes = documentFileService.getFile(fileLocation);
                if (fileBytes != null) {
                    String fileName = fileLocation.substring(fileLocation.indexOf("/") + 1, fileLocation.length());
                    File file = new File(saveFilesToLocation+fileName);
                    file.withOutputStream {
                        it.write fileBytes
                    }

                    println "$counter) Wrote file ${fileLocation} to ${saveFilesToLocation+fileLocation}"
                } else {
                    println "$counter) UNABLE TO RETRIEVE FILE: $fileLocation";
                }

            } catch (Exception e) {
                e.printStackTrace()
            }
        } else {
            counter++;
        }
    }

0 个答案:

没有答案