FileReader.read() zawsze wczytuje 65279

0

Cześć! Poniżej przedstawiony kod ma za zadanie realizować typowy szyfr cezara z użyciem plików tekstowych. Po drobnej analizie okazało się, że metoda read klasy FileReader za każdym razem wczytuje liczbę 65279. Jest to dla mnie o tyle dziwne, że** za pierwszym razem program wykonał się bezbłędnie**.
Po przeszukaniu odpowiedzi z google dowiedziałem się jedynie, że może mieć to coś wspólnego z formatowaniem utf-8 i utf-8 without BOM. Mi niestety nic to nie mówi, ale może Was na coś to naprowadzi.
Z góry dziękuję za pomoc.

 
package szyfrat;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;



public class szyfr
{
	public static void main(String[] args) throws IOException
	{
		char[][] slownik = new char[][] {{'a','ą','b','c','ć','d','e','ę','f','g','h','i','j','k','l','ł','m','n','ń','o','ó','p','r','s','ś','t','u','w','y','z','ź','ż'},{'A','Ą','B','C','Ć','D','E','Ę','F','G','H','I','J','K','L','Ł','M','N','Ń','O','Ó','P','R','S','Ś','T','U','W','Y','Z','Ź','Ż'}};
		Scanner in = new Scanner(System.in);
		System.out.println("1 - Odkoduj a.txt \n 2 - Zakoduj a.txt");
		int a = in.nextInt();
		in.close();
		if(a==1)
		{
			SaveToB(ReadAndUncode(slownik));
		}
		else if (a==2)
		{
			SaveToB(ReadAndCode(slownik));
		}
		
		
	}
	public static void SaveToB(String SaveIt) throws FileNotFoundException
	{
		File file = new File("C:/Java/workspace/szyfrat/src/szyfrat/B.txt");
		PrintWriter zapis = new PrintWriter(file);
	    zapis.println(SaveIt);
	    zapis.close();
	}
	public static String ReadAndUncode (char[][] slownik) throws IOException
	{
		String SaveIt = "";
		FileReader in = null;
		try
		{
			int g=-1, h=-1;
			in = new FileReader("C:/Java/workspace/szyfrat/src/szyfrat/A.txt");
			int c;
			c = in.read();
			while (c != -1)
			{	
				if(Character.isWhitespace((char)c)) SaveIt+=(char)(c);
				else
				{
					for(int i=0; i<2; i++)
					{	
						for(int j=0; j<32; j++)
						{
							if(slownik[i][j] == (char)c)
							{
								g=i;
								h=j;
								break;
							}
						}
						if(g!=-1) break;
					}
					if(g<0 || h<0) throw new ArrayStoreException();
				
					if(h>1) h=(h-2)%32;
					else h+=30; 
					SaveIt+=slownik[g][h];
				}
				c= in.read();
			}
		}
		catch (Exception x)
		{
			System.out.println(x);
		}
		finally
		{
				if(in != null);
				in.close();
		}

		return SaveIt;
	}
	public static String ReadAndCode (char[][] slownik) throws IOException
	{
		String SaveIt = "";
		FileReader in = null;
		try
		{
			int g=-1, h=-1;
			in = new FileReader("C:/Java/workspace/szyfrat/src/szyfrat/A.txt");
			int c;
			c = in.read();
			while (c != -1)
			{	
				if(Character.isWhitespace((char)c)) SaveIt+=(char)(c);
				else
				{
					for(int i=0; i<2; i++)
					{	
						for(int j=0; j<32; j++)
						{
							if(slownik[i][j] == (char)c)
							{
								g=i;
								h=j;
								break;
							}
						}
						if(g!=-1) break;
					}
					if(g<0 || h<0) throw new ArrayStoreException();
					h=(h+2)%32;
					SaveIt+=slownik[g][h];
				}
				c= in.read();
			}
		}
		catch (Exception x)
		{
			System.out.println(x);
		}
		finally
		{
				if(in != null);
				in.close();
		}

		return SaveIt;
	}
}
0

Nie wczytywalem sie...

Ma problem z polskimi znakami przede wszystkim. I poczytaj może to:
http://java67.blogspot.com/2014/05/3-examples-to-read-inputstream-as-String-Java-Guava-Commons.html

I np. to http://www.dotnetperls.com/caesar-java

oraz o try catch with resources. Generalnie bedziesz to musial 'lekko' przebudowac. Na chwile obecna to chyba nic tam nawet nie zapisujesz do pliku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1