在Kotlin中将大型Inputstream写入File

时间:2016-02-20 20:09:37

标签: kotlin

我有大量的文本从REST Web服务返回,我想直接写入文件。这样做最简单的方法是什么?

我编写了以下函数扩展名WORKS。但我无法想到有更清洁的方法可以做到这一点。

注意:我希望尝试使用资源来自动关闭流和文件

fun File.copyInputStreamToFile(inputStream: InputStream) {
    val buffer = ByteArray(1024)

    inputStream.use { input ->
        this.outputStream().use { fileOut ->

            while (true) {
                val length = input.read(buffer)
                if (length <= 0)
                    break
                fileOut.write(buffer, 0, length)
            }
            fileOut.flush()
        }
    }
}

5 个答案:

答案 0 :(得分:45)

您可以使用copyTo function

简化您的功能
$http({
    url: "/api/v1/login",
    method: "POST",
    headers: { "Content-Type": "application/json" },
    data: {
        username: uname, 
        password: pword
    }     
 })
 .then (
    function (success) {
        $scope.content = success.data;
        if ($scope.content.status == "Login successful") {
            window.location.href="/apps/home.html"; 
        } else {
            alert("Login failed");
            window.location.href="#login";
        };
    },
    function (error) {
        alert("Call error = " + error.status);
        window.location.href="#login";
    }
 ); 

答案 1 :(得分:7)

我的主张是:

fun InputStream.toFile(path: String) {
    File(path).outputStream().use { this.copyTo(it) }
}

没有关闭当前流

InputStream.toFile("/path/filename")

另外,不要忘记处理异常,例如,如果写入权限被拒绝:)

答案 2 :(得分:6)

我建议这样做:

fun InputStream.toFile(path: String) {
    use { input ->
        File(path).outputStream().use { input.copyTo(it) }
    }
}

然后使用像:

InputStream.toFile("/some_path_to_file")

答案 3 :(得分:0)

看来对我有用的是:

fun fileCopyer(localFileA: File, localFileB: File) {
var output = localFileA.inputStream()
output.copyTo(localFileB.outputStream())
output.close()
}

答案 4 :(得分:-1)

你需要这样做

$api_key = "AIzaSyD...nR8";
stream_context_set_default(['http' => ['ignore_errors' => true]]);
$source_videos = file_get_contents("https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId={UCuB3qjWes1E8t4yUmbP360Q}&maxResults=1&key={".$api_key."}");

echo $api_key;
echo $source_videos;