//Textfil.java

// TEXTFIL:

// Metoder för att skriva och läsa textfiler bekvämt
// och med rätt tecken (å, ä, ö).
// ====================================== 

// Version: 0.1

//      Copyright (c) 2012 Per Tunedal, Stockholm, Sweden
//       Author: Per Tunedal <info@tunedal.nu>

//       This program is free software: you can redistribute it and/or modify
//       it under the terms of the GNU General Public License as published by
//       the Free Software Foundation, either version 3 of the License, or
//       (at your option) any later version.

//       This program is distributed in the hope that it will be useful,
//       but WITHOUT ANY WARRANTY; without even the implied warranty of
//       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//       GNU General Public License for more details.

//       You should have received a copy of the GNU General Public License
//       along with this program.  If not, see <http://www.gnu.org/licenses/>.


// Notes
// =====

// v. 0.1 Comments etc mainly in Swedish.
// --------------------------------------

package per.edu;

import java.io.*; // för att skapa/öppna en fil (File)
import java.util.*; // för att skriva/läsa en fil (PrintWriter resp. Scanner)

public class Textfil

// Öppna och skriv till en textfil
// Skriver över om filen finns

{

	public static void skrivText (String filnamn, String text) throws Exception
	{
	// Binder en textfil till en variabel
	// Filen skapas om den inte finns.
	// Använder paketet java.io
	
	File   fil = new File (filnamn); // skapas i aktuell katalog
	
	// Skapar ett FileWriter-objekt för skrivning till filen
	// och binder objektet till filen
	// Filen öppnas samtidigt för skrivning.
	// Använder paketet java.io
	
	// Skriver över filen om den finns
	// (fil, true) lägger till på slutet
	
	FileWriter fw = new FileWriter (fil); // Java 1.4?
	
	// Skapar ett PrintWriter-objekt för 
	// bekväm skrivning till filen.
	// (Automatisk omvandling till tkn-sträng.)
	// och binder objektet till filen
	// Använder paketet java.util	
	
	PrintWriter fout = new PrintWriter (fw); // Java 1.4?
		
	// Skriver till filen
	
	fout.print (text);
	
	// Stänger filen
	// framtvingar skrivning av de sista buffrade tecken,
	// görs annars med flush().
	
	fout.close();  // Stänger även fw!

	}

	// Öppna och skriv till en textfil
	// Lägger till om filen finns

	public static void addText (String filnamn, String text) throws Exception
	{

	// Binder en textfil till en variabel
	// Filen skapas om den inte finns.
	// Använder paketet java.io
	
	File   fil = new File (filnamn); // skapas i aktuell katalog
	
	// Skapar ett FileWriter-objekt för skrivning till filen
	// och binder objektet till filen
	// Filen öppnas samtidigt för skrivning.
	// Använder paketet java.io
	
	// Lägger till i slutet på filen
	// om den finns
	// (argumentet "true")
	
	FileWriter fw = new FileWriter (fil, true);
		
	// Buffrad utskrift
	// skapar ett BufferedWriter-objekt för skrivning
	// och binder det till FileWriter-objektet.
	
	BufferedWriter fout = new BufferedWriter (fw);
		
	// Lägger till radbrytning.
	fout.write (text + "\n"); // BufferedWriter
	
	// Stänger filen
	// framtvingar skrivning av de sista buffrade tecken,
	// görs annars med flush().
	
	fout.close();  // Stänger även fw!
	
	}
	
	
// Öppna och skriv till en textfil med angiven kodning
// Skriver över om filen finns

	public static void skrivText (String filnamn, String text, String encoding) throws Exception
	{
	// Binder en textfil till en variabel
	// Filen skapas om den inte finns.
	// Använder paketet java.io
	
	File   fil = new File (filnamn); // skapas i aktuell katalog
	
	// Skapar ett FileWriter-objekt för skrivning till filen
	// och binder objektet till filen
	// Filen öppnas samtidigt för skrivning.
	// Använder paketet java.io
	
	// Skriver över filen om den finns
	// (fil, true) lägger till på slutet
	
	 // Skriver byte-ström till fil
	FileOutputStream fos = new FileOutputStream (fil);	
		
	// Character till byte
	OutputStreamWriter fout = new OutputStreamWriter (fos, encoding); // Java 1.6
	
	// Skriver till filen
	
	//fout.print (text);
	fout.write (text); // Java 1.6
	
	// Stänger filen
	// framtvingar skrivning av de sista buffrade tecken,
	// görs annars med flush().
	
	fout.close(); // Stänger även fw!

	}
	
	// Läs från en textfil
	
	public static String laesText (String filnamn) throws Exception
	
	{
	
	File fil = new File (filnamn); // Öppnar en fil
	
	Scanner fin = new Scanner (fil); // Binder till läsare
	
	String text = "";
	
	String rad = "";
	
	while (fin.hasNextLine())
		{
		rad = fin.nextLine() + "\n";
		text = text + rad;		
		}
	
	fin.close(); // Stänger filen
		
	return text;
	}
	
	// Läs från en texfil med angiven kodning
	
	public static String laesText (String filnamn, String encoding) throws Exception
	
	{
	
	File fil = new File (filnamn); // Öppnar en fil
	
	// läser byte från fil
	FileInputStream fis = new FileInputStream (fil);
	
	// Läsare för rader etc
	// avkodar från angiven kodning
	
	Scanner fin = new Scanner (fis, encoding);
	
	String text = "";
	
	String rad = "";
	
	while (fin.hasNextLine())
		{
		rad = fin.nextLine() + "\n";
		text = text + rad;
		}
	
	fin.close(); // Stänger filen
	
	return text;

	
	}
	
}