【问题标题】:How to do File creation and manipulation in functional style?如何以功能风格进行文件创建和操作?
【发布时间】:2014-10-05 20:29:37
【问题描述】:

我需要编写一个程序,在其中运行一组指令并在目录中创建一个文件。一旦文件被创建,当再次运行相同的代码块时,它不应该运行相同的指令集,因为它之前已经执行过,这里文件用作保护。

var Directory: String = "Dir1"
var dir: File = new File("Directory");
dir.mkdir();

var FileName: String = Directory + File.separator + "samplefile" + ".log"
val FileObj: File = new File(FileName)

if(!FileObj.exists())
    // blahblah
else 
{
    // set of instructions to create the file
}

当程序最初运行时,该文件将不存在,因此它应该运行else 中的指令集并创建文件,并且在第一次运行后,第二次运行它应该退出文件存在。

问题是我不明白new File,文件是什么时候创建的?我应该使用file.CreateNewFile 吗?另外,如何使用case 以函数式风格编写这个?

【问题讨论】:

  • 三个小点,与题无关。尊重 Scala 命名约定是个好主意:使用var directory 而不是var Directory 等(参见Scala style guide)。您应该避免在可以使用val 的地方使用var:使用val Directory 而不是var Directory。最后,最好避免将路径名连接为字符串,而是使用 File 类的其他构造函数,例如:val directory = new File("Dir1"); val file = new File(directory, "samplefile.log") - 这样,您就不必担心分隔符了。

标签: scala


【解决方案1】:

重要的是要了解java.io.File 不是文件系统上的物理文件,而是路径名的表示——根据 javadoc:“文件和目录路径名的抽象表示”。所以new File(...) 与创建实际文件无关——您只是定义一个路径名,它可能对应于现有文件,也可能不对应。

要创建一个空文件,您可以使用:

val file = new File("filepath/filename")
file.createNewFile();

如果在 JRE 7 或更高版本上运行,您可以使用新的 java.nio.file API:

val path = Paths.get("filepath/filename")
Files.createFile(path)

如果您对默认的 IO API 不满意,您可以考虑一些替代方案。我知道的特定于 Scala 的有:

或者您可以使用 Java 世界中的库,例如 Google GuavaApache Commons IO

编辑:我最初没有考虑的一件事:我将“创建文件”理解为“创建空文件”;但是如果你打算在文件中立即写一些东西,你一般不需要先创建一个空文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2020-01-12
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多