2017-04-10 88 views
0

我想在Scala中递归解压缩文件我已经修改了现有的Java代码到scala语法。斯卡拉字节数组类型不匹配错误

在我的代码中的一个点,我声明一个字节数组来读取数据,我得到以下错误:类型不匹配;发现:数组[java.lang.Byte中]要求:数组[scala.Byte]

而且我inputstream.read功能给我的一个错误:替代品读重载的方法值:(X $ 1:数组[斯卡拉Int()int(x $ 1:Array [scala.Byte])Int不能应用于(Array [java.lang.Byte],Int,Int)

我想这也是由于该数组的声明。我该如何解决这个问题?有没有办法将java.lang.Byte转换为scala.Byte?

这是我的代码:

import java.io._; 
import org.apache.log4j._ 
import org.apache.spark.SparkContext 
import java.io.IOException 
import scala.collection.JavaConversions._ 
import java.io.FileInputStream 
import java.io.FileOutputStream 
import java.util.zip.ZipEntry 
import java.util.zip.ZipInputStream 
import java.util.zip.ZipEntry 
import java.util.zip.ZipFile 
import java.io.InputStream 
import java.io.OutputStream 
import java.io.File 
import java.lang.Byte 

object MultiLevelUnzip 
{ 
    val BUFFER = 2048  
    def main (args:Array[String]) 
    { 
    Logger.getLogger("org").setLevel(Level.ERROR) 

    val sc = new SparkContext("local[*]","Unzip") 
    //val Files = sc.listFiles() 
    sc.stop() 
    } 

    def findFiles(d : File): Array[File] = 
     { 
     val (dirs, files) = d.listFiles.partition(_.isDirectory) 
     files ++ dirs.flatMap(findFiles) 
     } 

    def extractFolder(zipFile:String)= 
{ 
    System.out.println(zipFile); 

    val file = new File(zipFile); 

    val zip = new ZipFile(file); 
    val newPath = zipFile.substring(0, zipFile.length() - 4); 

    new File(newPath).mkdir(); 
    var zipFileEntries = zip.entries() 

    // Process each entry 
    while (zipFileEntries.hasMoreElements()) 
    { 
     // grab a zip file entry 
     val entry = zipFileEntries.nextElement() 
     val currentEntry = entry.getName() 
     val destFile = new File(newPath, currentEntry); 
     //destFile = new File(newPath, destFile.getName()); 
     val destinationParent = destFile.getParentFile(); 

     // create the parent directory structure if needed 
     destinationParent.mkdirs(); 

     if (!entry.isDirectory()) 
     { 
      val is = new BufferedInputStream(zip.getInputStream(entry)) 
      var currentByte = null 
      // establish buffer for writing file 


     // val buffer = Array.fill[Byte](BUFFER)(_) 


      // write the current file to disk 
      val fos = new FileOutputStream(destFile) 
      val dest = new BufferedOutputStream(fos,BUFFER) 


      val data = new Array[Byte](BUFFER) 

      while ((currentByte = is.read(data,0, BUFFER)) != -1) { 
        dest.write(data, 0, currentByte); 
       } 

      dest.flush(); 
      dest.close(); 
      is.close(); 
     } 

     if (currentEntry.endsWith(".zip")) 
     { 
      // found a zip file, try to open 
      extractFolder(destFile.getAbsolutePath()); 
     } 
    } 
} 
} 

回答

2

尝试删除该字符串

import java.lang.Byte 

,允许在数组定义

val data = new Array[Byte](BUFFER) 
+0

之大,工作,但在使用编译型scala.Byte ((currentByte = is.read(data,0,BUFFER))!= -1) { dest.write(data,0,currentByte); } 我仍然在类型不匹配的读取函数中出现错误,其中预计发现null并且发现Int。 关于如何解决这个问题的任何想法? –