सवाल स्कैला में संसाधन फ़ोल्डर से फ़ाइलों को कैसे पढ़ा जाए?


मेरे पास एक फ़ोल्डर संरचना है जैसे नीचे:

- main
-- java
-- resources 
-- scalaresources
--- commandFiles 

और उस फ़ोल्डर में मेरे पास मेरी फाइलें हैं जिन्हें मुझे पढ़ना है। यहां कोड है:

def readData(runtype: String, snmphost: String, comstring: String, specificType:  String): Unit = {
  val realOrInvFile = "/commandFiles/snmpcmds." +runtype.trim // these files are under commandFiles folder, which I have to read. 
    try {
      if (specificType.equalsIgnoreCase("Cisco")) {
        val specificDeviceFile: String = "/commandFiles/snmpcmds."+runtype.trim+ ".cisco"
        val realOrInvCmdsList = scala.io.Source.fromFile(realOrInvFile).getLines().toList.filterNot(line => line.startsWith("#")).map{
          //some code 
        }
        val specificCmdsList = scala.io.Source.fromFile(specificDeviceFile).getLines().toList.filterNot(line => line.startsWith("#")).map{
          //some code
        }
      }
    } catch {
      case e: Exception => e.printStackTrace
    }
  }
}

69
2017-12-08 15:12


मूल


अगर आपके पास कोई फॉलोअप प्रश्न है तो कृपया इस पर टिप्पणी क्यों करें एंड्रियास न्यूमैन द्वारा प्रदान किया गया जवाब स्वीकार नहीं किया गया था। -1। - Vishrant


जवाब:


स्कैला में संसाधन ठीक उसी तरह काम करते हैं जैसे वे जावा में करते हैं। इसका पालन करना सबसे अच्छा है जावा सर्वोत्तम प्रथाओं और सभी संसाधनों में डाल दिया src/main/resources तथा src/test/resources

उदाहरण फ़ोल्डर संरचना:

testing_styles/
├── build.sbt
├── src
│   └── main
│       ├── resources
│       │   └── readme.txt

स्कैला 2.12.x

ऑब्जेक्ट संसाधनों को पढ़ने के लिए स्रोत विधि प्रदान करता है fromResource

import scala.io.Source
val readmeText : Iterator[String] = Source.fromResource("readme.txt").getLines

पूर्व संस्करण

संसाधनों को पढ़ने के लिए आप उपयोग कर सकते हैं getClass.getResource तथा getClass.getResourceAsStream ।

val stream : InputStream = getClass.getResourceAsStream("/readme.txt")
val lines = scala.io.Source.fromInputStream( stream ).getLines

ध्यान रखें कि getResourceAsStream संसाधनों का हिस्सा होने पर भी ठीक काम करता है जार, getResource, जो एक यूआरएल देता है जिसे अक्सर फाइल बनाने के लिए प्रयोग किया जाता है, वहां समस्याएं पैदा हो सकती हैं।

निकल त्रुटि प्रतिक्रिया (2.12.x)

अनावश्यक जावा एनपीई से बचने के लिए (जावा बहुत भयानक है), इस पर विचार करें:

import scala.io.Source
import scala.util.Try

def niceFeedbackReadResource(resource: String): List[String] =
  Try(Source.fromResource(resource).getLines.toList)
    .recover(throw new FileNotFoundException(resource))

इसके बजाय सार्थक एफएनएफई प्राप्त करने के लिए।

उत्पादन कोड के लिए मैं यह भी सुनिश्चित करने के लिए सुझाव दूंगा कि स्रोत फिर से बंद हो।


142
2017-12-08 15:58



GetResource का उपयोग करते हुए और इसे फ़ाइल में बदलते समय किस तरह की समस्याएं हो सकती हैं? क्या आप लिंक प्रदान कर सकते हैं? - akauppi
कुछ परिस्थितियों में एक शून्य सूचक: stackoverflow.com/questions/941754/... - Andreas Neumann
यह कोड शायद GetResourceAsStream के लिए खुले हैंडलर को छोड़ रहा है। - Sisso
मत भूलना close स्रोत - Guillaume Massé


Scala> = 2.12 के लिए, उपयोग करें Source.fromResource:

scala.io.Source.fromResource("located_in_resouces.any")

20
2017-12-08 11:32



महत्वपूर्ण: के साथ Source.fromResource आप प्रारंभिक आगे स्लैश नहीं डालते हैं जो आपके पास है getResourceAsStream। - vossad01
और ध्यान दें कि यह 2.12+ है - rbellamy


import scala.io.Source

object Demo {

  def main(args: Array[String]): Unit = {

    val fileStream = getClass.getResourceAsStream("/json-sample.js")
    val lines = Source.fromInputStream(fileStream).getLines
    lines.foreach(line => println(line))

  }

}

enter image description here


0
2017-08-04 14:18