2014-10-05 35 views
4

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

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以功能风格编写此代码?

+1

三个小问题,与问题无关。尊重Scala命名约定是个好主意:使用'var directory'而不是'var Directory'等(参见[Scala样式指南](http://docs.scala-lang.org/style/))。你应该避免在你可以使用'val'的地方使用'var':使用'val Directory'而不是'var Directory'。最后,最好避免将路径名连接为字符串,并使用类File的其他构造函数,如下所示:'val directory = new File(“Dir1”); val file = new File(directory,“samplefile.log”)' - 这样,你不必担心分隔符。 – 2014-10-06 14:48:28

回答

6

明白,一个java.io.File不是文件系统上的物理文件是很重要的,但路径的表示 - 每的Javadoc:“文件和目录的抽象路径名表示”。因此new File(...)与创建实际文件无关 - 您只是定义了一个路径名,该路径名可能与现有文件相对应,也可能不相对应。

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

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

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

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

如果你不快乐使用默认的IO API,您可以考虑多种选择。据我所知,具体斯卡拉-的是:

或者你可以使用从Java世界库,如Google GuavaApache Commons IO

编辑:我最初没有考虑过的一件事:我将“创建文件”理解为“创建空文件”;但如果您打算在文件中立即编写,则通常不需要先创建空文件。

+0

好的!非常感谢:) – jarvis11 2014-10-06 19:39:33