Ruby erbjuder enkla, eleganta och kraftfulla sätt att läsa från och skriva till filer. Språket lägger stor vikt vid läsbarhet och utvecklarvänlighet, vilket gör fil-I/O-operationer enkla och smidiga. Den här guiden behandlar de vanligaste och mest typiska metoderna med praktiska exempel.
Grundläggande begrepp
I Ruby utförs filhantering vanligtvis med hjälp av Fil klassen eller den kortare File.open metod. De flesta filåtgärder använder block för att säkerställa att filer stängs ordentligt efter användning, vilket förhindrar resursläckor.
Öppna en fil
Det rekommenderade sättet är att använda ett blockformulär:
ruby
File.open("filnamn.txt", "r") do |fil|
# arbetar med filen
slutet
#-filen stängs automatiskt härOm det inte finns något block måste du stänga filen manuellt:
ruby
file = File.open("filename.txt", "r")
# ... drift ...
file.closeFillägen
Det andra argumentet till File.open är den läge sträng:
| Läge | Betydelse |
| “r” | Skrivskyddad (standard) |
| “w” | Endast skrivåtkomst, skapar/trunkerar filen |
| “a” | Skrivskyddad, lägger till data i filen |
| “r+” | Läser och skriver, bevarar innehållet |
| “w+” | Läser och skriver, trunkerar filen |
| “a+” | Läs och skriv, lägg till |
Lägg till “b” för binärt läge i Windows (t.ex. “rb”, “wb”).
Läsa in filer i Ruby
1. Läs hela filen som en sträng
ruby
content = File.read("example.txt")
puts contentEller genom att använda File.open:
ruby
content = File.open("example.txt", "r") { |f| f.read }2. Läs in hela filen i en array med rader
ruby
lines = File.readlines("example.txt")
lines.each { |line| puts line }
# Eller mer idiomatiskt uttryckt:
File.readlines("example.txt").each do |line|
puts "Rad: #{line.chomp}"
end3. Läs rad för rad (mest minneseffektivt)
Perfekt för stora filer:
ruby
File.open("large_file.txt", "r") do |file|
file.each_line do |line|
puts line.chomp.upcase
end
endEller genom att använda den kortare foreach:
ruby
File.foreach("large_file.txt") do |line|
process(line.chomp)
end4. Läs ett visst antal byte eller rader
ruby
File.open("data.bin", "rb") do |f|
header = f.read(16) # läser de första 16 byten
sätter rubrik
slut
# Läs de första 5 raderna
first_five = File.foreach("log.txt").first(5)5. Läs med angiven kodning
ruby
content = File.read("utf8_file.txt", encoding: "UTF-8")
# eller
File.open("file.txt", "r:UTF-8") do |f|
f.each_line { |line| puts line }
endSkriva till filer i Ruby
1. Skriva en sträng till en fil (överskriver)
ruby
File.write("output.txt", "Hej, Ruby!\nDet här är en ny fil.")Det här är det enklaste och vanligaste sättet.
2. Skriv med hjälp av File.open (blockform)
ruby
File.open("greeting.txt", "w") do |file|
file.puts "Hello World"
file.puts "Välkommen till Ruby-fil-I/O"
file.write "Denna rad skrivs utan radbrytning"
file << " << Här används shovel-operatorn\n"
endMetoder som finns tillgängliga inom blocket:
sätter– lägger till en radbrytningskriv ut– ingen radbrytningskriva– ingen radbrytning (alias för<<)<<– grävmaskinist
3. Lägg till i en fil
ruby
File.open("log.txt", "a") do |file|
file.puts "#{Time.now}: Programmet startades"
end
# Eller kortare:
File.write("log.txt", "Ny loggpost\n", mode: "a")4. Skriv en radmatris
ruby
lines = ["Första raden", "Andra raden", "Tredje raden"]
File.open("lines.txt", "w") do |file|
lines.each { |line| file.puts line }
end
# Eller ännu kortare:
File.write("lines.txt", lines.join("\n") + "\n")Praktiska exempel
Exempel 1: Kopiera en fil
ruby
def copy_file(källa, mål)
File.write(mål, File.read(källa))
end
copy_file("källa.txt", "backup.txt")Eller i binärläge:
ruby
File.write("backup.bin", File.read("original.bin", mode: "rb"), mode: "wb")Exempel 2: Enkel CSV-skrivare
ruby
data = [
["Namn", "Ålder", "Stad"],
["Alice", 30, "New York"],
["Bob", 25, "London"]
]
File.open("people.csv", "w") do |file|
data.each do |row|
file.puts row.join(",")
end
endExempel 3: Enkel CSV-läsare
ruby
File.foreach("people.csv") do |line|
name, age, city = line.chomp.split(",")
puts "#{name} är #{age} år gammal och bor i #{city}"
endExempel 4: Räkna rader i en fil
ruby
line_count = File.foreach("large.txt").inject(0) { |count, _| count + 1 }
puts "Totalt antal rader: #{line_count}"
# Eller enklare uttryckt (laddar in alla rader i minnet):
puts File.readlines("file.txt").sizeExempel 5: Säker filskrivning (atomisk skrivning)
För att undvika att filer skadas vid ett systemkrasch ska du först skriva till en tillfällig fil:
ruby
require 'tempfile'
Tempfile.create('safe_write') do |temp_file|
temp_file.puts "Viktiga data"
temp_file.puts "Ännu viktigare data"
temp_file.flush
# Ersätt nu målfilen atomärt
File.rename(temp_file.path, "important.txt")
endArbeta med vägar
Användning File.expand_path, File.join, och Sökväg för stabil hantering av sökvägar:
ruby
require 'pathname'
path = Pathname.new("/tmp") / "myapp" / "log.txt"
File.write(path, "Logginlägg")
# Eller med hjälp av File.join
full_path = File.join(Dir.home, "Documents", "notes.txt")Felhantering
Hantera alltid eventuella fel:
ruby
begin
content = File.read("nonexistent.txt")
rescue Errno::ENOENT
puts "Filen hittades inte!"
rescue Errno::EACCES
puts "Åtkomst nekad!"
rescue => e
puts "Fel: #{e.message}"
endEller mer idiomatiskt uttryckt:
ruby
if File.exist?("config.txt")
config = File.read("config.txt")
else
puts "Konfigurationsfilen saknas, standardinställningarna används"
endBästa metoder för att läsa och skriva filer i Ruby
- Använd alltid blockformat när det är möjligt – säkerställer att filen stängs.
- Användning
File.read/File.writeför enkla åtgärder som omfattar hela filer. - Användning
foreachför stora filer, för att undvika att allt laddas in i minnet. - Ange kodning när man arbetar med text som inte är ASCII-kodad.
- Kontrollera om filen finns läs detta först om det behövs.
- Använd lämpliga lägen (särskilt i binärläge i Windows).
- Hantera undantag på ett elegant sätt i produktionskoden.
Slutsats
På RailsCarmaett ledande Ruby on Rails utvecklingsföretag, utnyttjar våra erfarna utvecklare Rubys eleganta funktioner för fil-I/O för att leverera robusta och lätthanterliga applikationer. Rubys tydliga syntax, blockbaserad resurshantering och kraftfulla metoder som File.read och File.write göra filhantering i Ruby säker, effektiv och skalbar.
Oavsett om det handlar om att bearbeta konfigurationsfiler, hantera loggar, skapa rapporter eller bygga komplexa datapipelines, så är vår Rälsutvecklingstjänster säkerställa så lite standardkod som möjligt, maximal uttrycksfullhet och hög prestanda. Genom att välja att anställa Ruby-utvecklare Genom RailsCarma får du tillgång till kompetenta utvecklare som bygger pålitliga Rails-applikationer av hög kvalitet, skräddarsydda efter just dina affärsbehov.