Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Kotlin在Android中复制文件颤振插件_Android_Kotlin_Assets_Flutter Plugin - Fatal编程技术网

使用Kotlin在Android中复制文件颤振插件

使用Kotlin在Android中复制文件颤振插件,android,kotlin,assets,flutter-plugin,Android,Kotlin,Assets,Flutter Plugin,尝试创建一个颤振插件,将资产文件复制到本机应用程序文档文件夹 对于iOS,我通过以下代码实现了这一点(见下文) 然而,由于我对Android架构不太了解,我想知道我的Android MethodChannel代码应该是什么样子 我的Android部分这个颤振插件需要在KOTLIN 我需要一个从Android资产文件夹到Android文档文件夹的文件副本-所有这些都在Flitter插件和Kotlin中完成 同样,我有现成的Swift iOS。缺少的是Kotlin计数器中的Android。这方面你有

尝试创建一个颤振插件,将资产文件复制到本机应用程序文档文件夹

对于iOS,我通过以下代码实现了这一点(见下文)

然而,由于我对Android架构不太了解,我想知道我的Android MethodChannel代码应该是什么样子

我的Android部分这个颤振插件需要在KOTLIN

我需要一个从Android资产文件夹到Android文档文件夹的文件副本-所有这些都在Flitter插件和Kotlin中完成

同样,我有现成的Swift iOS。缺少的是Kotlin计数器中的Android。这方面你有什么帮助吗

以下是Swift中iOS频道的工作代码:

(即,它将文件从主捆绑包复制到iPhone的Documents目录…)

在科特林,我尝试过这个方法,但根本不起作用(

或者我尝试了这个——但又一次——完全没有成功:(


我终于找到了解决Kotlin文件复制问题的方法

以下是Kotlin中文件副本的解决方案

    import java.io.File
    import java.io.InputStream
    import io.flutter.util.PathUtils

    private fun copyFile(fileName: String): String {

      val assetStream: InputStream = mRegistrar.context().assets.open(fileName)
      val appliationDocumentsFolderPath: String = PathUtils.getDataDirectory(mRegistrar.context())
      val outputFilePath: String = appliationDocumentsFolderPath + "/" + fileName

      if (!File(outputFilePath).exists()) {
        File(outputFilePath).copyInputStreamToFile(assetStream)   
      }
      return outputFilePath
    }

    private fun File.copyInputStreamToFile(inputStream: InputStream) {
      inputStream.use { input ->
        this.outputStream().use { fileOut ->
          input.copyTo(fileOut)
        }
      }
    }
import java.io.File

private fun copyFileTrial1(fileName: String): String {

  File src = new File("../../assets/${fileName}");
  File dst = new File("../../DocumentsFolder/${fileName}", src.getName());
  FileInputStream inStream = new FileInputStream(src);
  FileOutputStream outStream = new FileOutputStream(dst);
  FileChannel inChannel = inStream.getChannel();
  FileChannel outChannel = outStream.getChannel();
  inChannel.transferTo(0, inChannel.size(), outChannel);
  inStream.close();
  outStream.close();
  return "hello1"
}
private fun copyFileTrial2(fileName: String): String {

    InputStream in = null;
    OutputStream out = null;
    try {
      in = assetManager.open(fileName);
      String outDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/X/Y/Z/" ; 
      File outFile = new File(outDir, filenfileNameame);
      out = new FileOutputStream(outFile);
      copyFile(in, out);
      in.close();
      in = null;
      out.flush();
      out.close();
      out = null;
    } catch(IOException e) {
      Log.e("tag", "Failed to copy asset file: " + fileName, e);
    }       
    return "hello2"
}

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while((read = in.read(buffer)) != -1){
      out.write(buffer, 0, read);
    }
}
    import java.io.File
    import java.io.InputStream
    import io.flutter.util.PathUtils

    private fun copyFile(fileName: String): String {

      val assetStream: InputStream = mRegistrar.context().assets.open(fileName)
      val appliationDocumentsFolderPath: String = PathUtils.getDataDirectory(mRegistrar.context())
      val outputFilePath: String = appliationDocumentsFolderPath + "/" + fileName

      if (!File(outputFilePath).exists()) {
        File(outputFilePath).copyInputStreamToFile(assetStream)   
      }
      return outputFilePath
    }

    private fun File.copyInputStreamToFile(inputStream: InputStream) {
      inputStream.use { input ->
        this.outputStream().use { fileOut ->
          input.copyTo(fileOut)
        }
      }
    }