Я создал функцию для создания файла. Моя цель - передать строку json и вернуть новый файл с содержимым строки json, переданной в него. Я называю эту функцию в другой функции, как:Создание нового файла в Scala с PrintWriter
val jsonFile: File = JsonCreate.getJsonFile(jsonString)
До сих пор, как у меня выглядит следующим образом: создать новый файл, который не существует, и я называю это «myJson.json»
Затем я создаю объект PrintWriter с идеей использования этого для создания моего окончательного файла. Итак, я прочитал содержимое строки json, в StringBuffer, а затем в PrintWriter. Сделав это, я надеюсь получить файл myJson.json с содержимым переданного в строке Json.
Я до сих пор не доволен результатом моих усилий. Например, я не уверен, использовал ли я Опцию так, как она должна использоваться. Я не доволен тем, как я использую вары.
Если я объявлю вал внутри попытки, я не смогу получить к нему доступ в конце. Поэтому я перехожу на Java-путь и помещаю переменную Option PrinterWriter снаружи. Это запах кода, который мне не нравится.
Как я могу сократить его и до сих пор сохраняет за собой право попробовать поймать и, наконец, закрыть ресурсы и т.д.
Это моя первая попытка написать эту функцию:
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