我有大量的文本从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()
}
}
}
答案 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;