Öffnen Sie einen E / A-Stream aus einer lokalen Datei oder URL


104

Ich weiß, dass es Bibliotheken in anderen Sprachen gibt, die eine Zeichenfolge, die entweder einen Pfad zu einer lokalen Datei oder eine URL enthält, als lesbaren E / A-Stream öffnen können.

Gibt es eine einfache Möglichkeit, dies in Rubin zu tun?

Antworten:


224

open-uri ist Teil der Standard-Ruby-Bibliothek und definiert das Verhalten neu, opensodass Sie sowohl eine URL als auch eine lokale Datei öffnen können. Es gibt ein FileObjekt zurück, daher sollten Sie in der Lage sein, Methoden wie readund aufzurufen readlines.

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

2
Gibt es eine Möglichkeit, ein Dateiobjekt wie hier aus einem ActionMailer-Anhang zurückzugeben?
AnApprentice

9
Wisse, dass dies jetzt ein bisschen alt ist, aber du kannst auch:content = open("http://example.com").read
Automatico

6
Sie können dies tun, aber wenn Sie dies außerhalb des Abschlusses tun, bleibt der Dateideskriptor geöffnet. Dies kann bei einigen Anwendungen ein Problem sein.
Aaron Hinni

19
Beachten Sie, dass eine Datei open-urinicht gestreamt wird, sodass Sie die ersten 4 KB nicht lesen können. open-uriliest beim Öffnen eine ganze Datei in den Speicher.
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Wenn Sie nach einer Möglichkeit suchen, sich zu versichern, ruft es nicht an Kernal.open. Kommt auch um Rubocop-Sicherheitsregeln herum.
Newdark-It
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.