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;
}
}