我創建了一個函數來創建一個文件。 我的目標是傳入一個json字符串,並返回一個新的File,並將json字符串的內容傳遞給它。我在另一個函數中調用這個函數爲:使用PrintWriter在Scala中創建一個新文件
val jsonFile: File = JsonCreate.getJsonFile(jsonString)
到目前爲止,我有辦法如下: 我創建一個不存在的新文件,我把它稱爲「myJson.json」
然後我創建一個PrintWriter對象,並使用它來創建我的最終文件。所以,我將json字符串的內容讀入一個StringBuffer,然後再讀入PrintWriter。完成這個之後,我希望將一個文件myJson.json與傳入的Json字符串的內容相關聯。
我對目前爲止的努力結果並不滿意。例如,我不確定我是否按照它應該使用的方式使用了Option。我對使用變量的方式感到不滿意。
如果我在嘗試中聲明一個val,我無法在finally中訪問它。所以我去了Java的方式,並把PrinterWriter的選項變量outside.This是一種代碼味道我不喜歡。
我怎樣才能縮短並仍然保留正確的嘗試捕捉,最後,關閉資源等
這是我在寫這個函數的第一次嘗試:
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',它沒有在任何地方定義。 –
我已經做了更正。謝謝 – user3825558