Skip to content

Commit b92c3af

Browse files
committed
Merge pull request scala#4561 from jdevelop/io-source-fromclasspath-2.12
SI-7514 Introduce Source.fromResource(...) method
2 parents a6261ef + 82fd8bc commit b92c3af

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

src/library/scala/io/Source.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,16 @@ object Source {
167167

168168
def fromInputStream(is: InputStream)(implicit codec: Codec): BufferedSource =
169169
createBufferedSource(is, reset = () => fromInputStream(is)(codec), close = () => is.close())(codec)
170+
171+
/** Reads data from a classpath resource, using either a context classloader (default) or a passed one.
172+
*
173+
* @param resource name of the resource to load from the classpath
174+
* @param classLoader classloader to be used, or context classloader if not specified
175+
* @return the buffered source
176+
*/
177+
def fromResource(resource: String, classLoader: ClassLoader = Thread.currentThread().getContextClassLoader())(implicit codec: Codec): BufferedSource =
178+
fromInputStream(classLoader.getResourceAsStream(resource))
179+
170180
}
171181

172182
/** An iterable representation of source data.

test/junit/scala/io/SourceTest.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ class SourceTest {
2828
@Test def canIterateLines() = {
2929
assertEquals(sampler.lines.size, (Source fromString sampler).getLines.size)
3030
}
31+
@Test def loadFromResource() = {
32+
val res = Source.fromResource("rootdoc.txt")
33+
assertTrue("No classpath resource found", res.getLines().size > 5)
34+
}
3135
@Test def canCustomizeReporting() = {
3236
class CapitalReporting(is: InputStream) extends BufferedSource(is) {
3337
override def report(pos: Int, msg: String, out: PrintStream): Unit = {

0 commit comments

Comments
 (0)