summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/io/AbstractFile.scala
diff options
context:
space:
mode:
authorRaphael Jolly <rjolly@users.sourceforge.net>2013-03-09 21:54:22 +0100
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-03-11 22:35:54 -0700
commit3e8f8ddb2ac057ad82e1a7e37f59baff1c0e15ac (patch)
tree5b510ff5f73e1c645da400ca759bc9d1a0f34fd8 /src/reflect/scala/reflect/io/AbstractFile.scala
parent9eb21e54bdb1ea23b4215c641c98bd90a8b859cf (diff)
downloadscala-3e8f8ddb2ac057ad82e1a7e37f59baff1c0e15ac.tar.gz
scala-3e8f8ddb2ac057ad82e1a7e37f59baff1c0e15ac.tar.bz2
scala-3e8f8ddb2ac057ad82e1a7e37f59baff1c0e15ac.zip
SI-874 reflect.io improvements
Diffstat (limited to 'src/reflect/scala/reflect/io/AbstractFile.scala')
-rw-r--r--src/reflect/scala/reflect/io/AbstractFile.scala34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/reflect/scala/reflect/io/AbstractFile.scala b/src/reflect/scala/reflect/io/AbstractFile.scala
index 4d6f14c71d..8b69efc749 100644
--- a/src/reflect/scala/reflect/io/AbstractFile.scala
+++ b/src/reflect/scala/reflect/io/AbstractFile.scala
@@ -7,7 +7,7 @@
package scala.reflect
package io
-import java.io.{ FileOutputStream, IOException, InputStream, OutputStream, BufferedOutputStream }
+import java.io.{ FileOutputStream, IOException, InputStream, OutputStream, BufferedOutputStream, ByteArrayOutputStream }
import java.io.{ File => JFile }
import java.net.URL
import scala.collection.mutable.ArrayBuffer
@@ -54,6 +54,8 @@ object AbstractFile {
if (url == null || !Path.isExtensionJarOrZip(url.getPath)) null
else ZipArchive fromURL url
}
+
+ def getResources(url: URL): AbstractFile = ZipArchive fromManifestURL url
}
/**
@@ -156,16 +158,28 @@ abstract class AbstractFile extends Iterable[AbstractFile] {
@throws(classOf[IOException])
def toByteArray: Array[Byte] = {
val in = input
- var rest = sizeOption.getOrElse(0)
- val arr = new Array[Byte](rest)
- while (rest > 0) {
- val res = in.read(arr, arr.length - rest, rest)
- if (res == -1)
- throw new IOException("read error")
- rest -= res
+ sizeOption match {
+ case Some(size) =>
+ var rest = size
+ val arr = new Array[Byte](rest)
+ while (rest > 0) {
+ val res = in.read(arr, arr.length - rest, rest)
+ if (res == -1)
+ throw new IOException("read error")
+ rest -= res
+ }
+ in.close()
+ arr
+ case None =>
+ val out = new ByteArrayOutputStream()
+ var c = in.read()
+ while(c != -1) {
+ out.write(c)
+ c = in.read()
+ }
+ in.close()
+ out.toByteArray()
}
- in.close()
- arr
}
/** Returns all abstract subfiles of this abstract directory. */