/** Tiedosto: TiedostoKasitt.java Tekijä: Juha Peltomäki. Toiminta: Kirjasto syötteiden lukemisiin ja tulostamiseen. Kirjasto käsittelee sekä tiedostojen lukemisen tiedostosta tai jostain URL-osoitteesta. Kirjastossa on toteutettu myös tiedoston kopiointi ja tulostaminen. Luokan Metodit: tiedosto_mjonoksi() URLista_mjonoksi() tallenna_tiedostoon() kopioi_tiedosto() */ import java.io.*; import java.util.zip.*; import java.util.Vector; import java.net.*; class Tiedosto { // Puskurin koko. Käytetään tiedostoon kirjoittamisessa public static final int PUSKURI_KOKO = 128; public static final int EOF = -1; /** palauttaa tiedoston merkkijonona */ public String tiedosto_mjonoksi(String nimi) throws FileNotFoundException, IOException { String luettu_rivi; String tulos = ""; FileInputStream tied_virta = new FileInputStream(new File(nimi)); BufferedReader syote = new BufferedReader(new InputStreamReader(tied_virta)); while (( luettu_rivi = syote.readLine()) != null) tulos += luettu_rivi + "\n"; syote.close(); tied_virta.close(); return tulos; } /*********************************************************************/ /** Lukee tiedoston parametrinä tuodusta URL-osoitteesta. Paikallinen tiedosto, file: -protokolla, Etätiedosto: -http: -protokolla. */ public String URLista_mjonoksi(String osoite) throws MalformedURLException, IOException { String luettu_rivi = ""; String tulos = ""; URL lahde = new URL(osoite); InputStream tied_virta = lahde.openStream(); BufferedReader syote = new BufferedReader( new InputStreamReader(tied_virta)); while (( luettu_rivi = syote.readLine()) != null) tulos += luettu_rivi + "\n"; syote.close(); tied_virta.close(); return tulos; } /*********************************************************************/ /** Tallentaa parametrinä tuodut merkkijonot tiedostoon käyttäen FileOutputStream-luokan oliota. */ public void tallenna_tiedostoon(String nimi, Vector merkkijonot) throws IOException { FileOutputStream tulos; File t = new File(nimi); // Jos tiedosto on olemassa, liitetään sen perään. if (t.exists() && t.canRead()) tulos = new FileOutputStream(nimi, true); // Muuten luodaan uusi. else tulos = new FileOutputStream(nimi); PrintWriter tulostus = new PrintWriter(tulos, true); for (int i=0; i < merkkijonot.size(); i++) tulostus.println(((String)merkkijonot.elementAt(i))); tulos.close(); } /*********************************************************************/ /** Tiedosto kopioidaan tavu kerrallaan käyttäen FIleInputStream ja FileOutputStream-luokkien olioita. */ public void kopioi_tiedosto(String tiedosto1, String tiedosto2) throws IOException { byte puskuri[] = new byte[PUSKURI_KOKO]; FileInputStream lahde = new FileInputStream(new File(tiedosto1)); FileOutputStream kohde = new FileOutputStream(new File(tiedosto2)); int pituus = 0; while ((pituus=lahde.read(puskuri)) != EOF) { kohde.write(puskuri, 0, pituus); } lahde.close(); kohde.close(); } } // Luokka päättyy /*********************************************************************/ public class TiedostoKasitt { public static void main (String args[] ) { try { String url = "file:Testi1.txt"; // Tähän tilalle voi vaihtaa esim. HTTP-palvelimella olevan tekstitiedoston URL-osoitteen Tiedosto f = new Tiedosto(); String mj1 = f.tiedosto_mjonoksi(args[0]); System.out.print(mj1); f.kopioi_tiedosto(args[0], args[0]+".vara"); String mj2 = f.URLista_mjonoksi(url); System.out.print(mj2); Vector v = new Vector(); v.addElement("Tämä on 1. rivi"); v.addElement("Tämä on 2. rivi"); v.addElement("Tämä on 3. rivi"); f.tallenna_tiedostoon("tulostettu.txt", v); } catch (Exception e) { e.printStackTrace(); } } }