【发布时间】:2015-06-18 23:55:27
【问题描述】:
我创建了一个函数来创建一个文件。 我的目标是传入一个 json 字符串并返回一个新文件,其中包含传入的 json 字符串的内容。我在另一个函数中调用这个函数为:
val jsonFile: File = JsonCreate.getJsonFile(jsonString)
到目前为止,我的方式如下: 我创建了一个不存在的新文件,我称之为“myJson.json”
然后我创建了一个 PrintWriter 对象,并打算使用它来创建我的最终文件。因此,我将 json 字符串的内容读入 StringBuffer,然后再读入 PrintWriter。完成后,我希望有一个 myJson.json 文件,其中包含传入的 Json 字符串的内容。
到目前为止,我对自己努力的结果并不满意。例如,我不确定我是否按照应有的方式使用了 Option。我对使用 vars 的方式不满意。
如果我在 try 中声明一个 val,我将无法在 finally 中访问它。所以我采用 Java 方式并将 PrinterWriter Option 变量放在外面。这是我不喜欢的代码味道。
我怎样才能缩短它并仍然保留正确的try catch,最后关闭资源等。
这是我第一次尝试编写这个函数:
import java.io._
import java.util.Scanner
object JsonCreate{
def createFile(jsonString: String): File = {
var tmpFile = new File("myJson.json")
var outFileOpt: Option[PrintWriter] = Some(new PrintWriter(new FileWriter(tmpFile, true)))
try {
//Update: Corrected the value of the Scanner parameter
val inFile: Scanner = new Scanner(jsonString)
while(inFile.hasNextLine) {
val strBuf = new StringBuffer(inFile.nextLine())
println("Contents of String Buffer is: " + strBuf)
outFileOpt.get.print(strBuf)
}
}catch {
case fnfex: FileNotFoundException => fnfex.printStackTrace()
case ioex: IOException => ioex.printStackTrace()
} finally {
outFileOpt.get.close()
}
tmpFile
}
}
【问题讨论】:
-
你的方法根本没有使用
jsonString。什么是finalJson,它没有在任何地方定义。 -
我已经更正了。谢谢
标签: scala