从本地文件或URL打开IO流


104

我知道有其他语言的库可以采用包含本地文件路径或url的字符串并将其作为可读IO流打开。

有没有简单的方法可以在红宝石中做到这一点?

Answers:


224

open-uri是标准Ruby库的一部分,它将重新定义行为,open以便您可以打开url和本地文件。它返回一个File对象,因此您应该能够调用诸如read和之类的方法readlines

require 'open-uri'
file_contents = open('local-file.txt') { |f| f.read }
web_contents  = open('http://www.stackoverflow.com') {|f| f.read }

2
有没有办法像从ActionMailer附件中返回文件对象一样返回文件对象?
AnApprentice 2010年

9
知道现在有点老了,但是您也可以这样做:content = open("http://example.com").read
Automatico

6
您可以,但是在闭包之外进行操作将使文件描述符保持打开状态。对于某些用法,这可能是个问题。
亚伦·辛尼

19
请注意,它open-uri不会流式传输文件,因此您无法读取文件的前4k。打开时open-uri将读取整个文件到内存中。
zed_0xff 2014年

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }如果您正在寻找一种确保不会致电的方法Kernal.open。还绕过了rubocop安全规则。
newdark-it
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.