【问题标题】:Scala exception in thread "main" java.io.FileNotFoundException线程“主”java.io.FileNotFoundException 中的 Scala 异常
【发布时间】:2018-10-29 17:57:15
【问题描述】:

以下是我的 Scala 代码:

import scala.io.Source

case class TempData(day:Int , DayOfYear:Int , month:Int , year:Int ,
                    precip:Double , snow:Double , tave:Double, tmax:Double, tmin:Double)
object TempData {
 def main(args:Array[String]) : Unit ={
   val source = Source.fromFile("C:///DataResearch/SparkScala/MN212142_9392.csv")
   val lines = source.getLines().drop(1)
   val data= lines.map{ line =>
     val p = line.split(",")
     TempData(p(0).toInt , p(1).toInt, p(2).toInt, p(4).toInt
     , p(5).toDouble, p(6).toDouble , p(7).toDouble, p(8).toDouble,p(9).toDouble)
   }.toArray
   source.close()
   data.take(5).foreach(println)
 }
}

以下是错误:

C:\Java\jdk1.8.0_144\bin\java "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.3\lib\idea_rt.jar=2298:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Java\jdk1.8.0_144\jre\lib\charsets.jar;C:\Java\jdk1.8.0_144\jre\lib\deploy.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\localedata.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\sunec.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;C:\Java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;C:\Java\jdk1.8.0_144\jre\lib\javaws.jar;C:\Java\jdk1.8.0_144\jre\lib\jce.jar;C:\Java\jdk1.8.0_144\jre\lib\jfr.jar;C:\Java\jdk1.8.0_144\jre\lib\jfxswt.jar;C:\Java\jdk1.8.0_144\jre\lib\jsse.jar;C:\Java\jdk1.8.0_144\jre\lib\management-agent.jar;C:\Java\jdk1.8.0_144\jre\lib\plugin.jar;C:\Java\jdk1.8.0_144\jre\lib\resources.jar;C:\Java\jdk1.8.0_144\jre\lib\rt.jar;C:\Users\Dell\IdeaProjects\ScalaSpark\target\scala-2.11\classes;C:\Users\Dell\.ivy2\cache\org.scala-lang\scala-library\jars\scala-library-2.11.12.jar TempData
Exception in thread "main" java.io.FileNotFoundException: C:\DataResearch\SparkScala\MN212142_9392.csv (The system cannot find the file specified)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at scala.io.Source$.fromFile(Source.scala:91)
    at scala.io.Source$.fromFile(Source.scala:76)
    at scala.io.Source$.fromFile(Source.scala:54)
    at TempData$.main(TempData.scala:7)
    at TempData.main(TempData.scala)

Process finished with exit code 1

我的文件 (MN212142_9392.csv) 位于 DataResearch 和 SparkScala 文件夹内的 C 盘中。我已经尝试了所有可能的更改,但没有任何帮助。

【问题讨论】:

    标签: scala fromfile


    【解决方案1】:

    尝试使用File 类而不是Source

    new File("path")
    

    它应该可以解决你的问题:)

    或者使用类Files :) 您可以在下面找到文档的链接: https://docs.oracle.com/javase/7/docs/api/java/io/File.html https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

    仔细检查您的路径。在我看来,更好的选择是使用相对路径而不是绝对路径。将此文件放在项目中并尝试使用相对路径。您的应用程序找不到您的文件:)

    编辑:

    创建了一个简单的文件 TempData.scala,其中包含:

    import scala.io.Source 
    
    object TempData {
      def main(args:Array[String]) : Unit ={
        val source = Source.fromFile("test.csv")
        val lines = source.getLines()
      }
    }
    

    我创建了文件test.csv

    我使用了scalac TempData.scala,之后使用了scala TempData。一切都很好,因为您以正确的方式使用方法。你的路径有问题。所以我的建议是尝试使用您放入项目中的文件,如果一切正常,请检查您以前的路径:)

    【讨论】:

    • 我不确定 File , Source 是 Scala 中的一个库(导入 scala.io.Source)来加载文件。不确定 File 的库。
    • 是的,但是对于在 Scala 中处理文件,更好的选择是使用 Java 类 :) 试试看,我确信这是更好的选择。在这里:tutorialspoint.com/java/java_files_io.htm 您可以找到如何在 Java 中处理文件的示例。 Scala 类不好:)
    • 是的,你可能是对的,但是如果我不想使用任何 java 库怎么办.. scala 库没有帮助吗?并且使用 java libray 将导致我做更多的代码更改,因为像 getLines() 这样的命令不起作用。
    • 为什么?如果 Java 中有更好的东西,在我看来,我们应该使用它。如果您想使用 scala 库,请尝试将此文件放入项目中并使用相对路径:)
    • 您的错误与路径错误有关,因此,首先需要检查路径。如果里面有文件,则可以使用相对路径。在实践中最好控制它:)
    【解决方案2】:

    我一直面临类似错误的问题:查找我已完成的示例代码:

      object CSVDemo extends App {
             val bufferedSource = io.Source.fromFile("C:\\Users\\dell\\IdeaProjects\\SbtExampleProject\\project\\job_test.txt")
            for (line <- bufferedSource.getLines()) {
              val cols = line.split(",").map(_.trim)
              println(s"${cols(0)}|${cols(1)}|${cols(2)}|${cols(3)}|${cols(4)}")
            }
    

    注意:我必须在项目目录中创建示例文件,当我试图查看它的位置时,我注意到路径是用“\”创建的,试试看它是怎么回事

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      相关资源
      最近更新 更多