Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do File creation and manipulation in functional style?

Tags:

scala

I need to write a program where I run a set of instructions and create a file in a directory. Once the file is created, when the same code block is run again, it should not run the same set of instructions since it has already been executed before, here the file is used as a guard.

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
}

When the programs runs initially, the file won't be present, so it should run the set of instructions in else and also create the file, and after the first run, the second run it should exit since the file exists.

The problem is that I do not understand new File, and when the file is created? Should I use file.CreateNewFile? Also, how to write this in functional style using case?

like image 787
druuu Avatar asked Oct 05 '14 20:10

druuu


People also ask

How to create a file in java?

java File file = new File("JavaFile. java"); We then use the createNewFile() method of the File class to create new file to the specified path.

How do you create a file in Java if it does not exist?

Java creating file with FileThe File's createNewFile method creates a new, empty file named by the pathname if a file with this name does not yet exist. The createNewFile returns true if the named file does not exist and was successfully created; false if the named file already exists.


1 Answers

It's important to understand that a java.io.File is not a physical file on the file system, but a representation of a pathname -- per the javadoc: "An abstract representation of file and directory pathnames". So new File(...) has nothing to do with creating an actual file - you are just defining a pathname, which may or may not correspond to an existing file.

To create an empty file, you can use:

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

If running on JRE 7 or higher, you can use the new java.nio.file API:

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

If you're not happy with the default IO APIs, you an consider a number of alternative. Scala-specific ones that I know of are:

  • scala-io
  • rapture.io

Or you can use libraries from the Java world, such as Google Guava or Apache Commons IO.

Edit: One thing I did not consider initially: I understood "creating a file" as "creating an empty file"; but if you intend to write something immediately in the file, you generally don't need to create an empty file first.

like image 124
Cyäegha Avatar answered Oct 23 '22 08:10

Cyäegha