Napisałem aplikacje odczytująca dane z plików tekstowych i wyświetlające je w tabelach etc...
Używam NetBeans 6.7 gdy tensam program odpalam z pośrednictwem NetBeans wszystko jest ok. Jednak dy uruchomie to bezpośrednio z pliku jar za pomoca Java TM Platform SE Binary po pierwsze nie mam polskich znaków, po kolejne nie wyświetlają mi sie dane w tabelkach. Nie wiem co jest grane. Jaka na to rada Może jakoś zle odpalam te aplikacje ?
Przeinstalowałem wszystkie javy jakie mam na nowsze, zrobiłem test na innym komputerze. Jest identycznie, odpalam z Netbeansa działa odpalam z pliku jar, nie wyświetla mi polskich znaków w polach combi, winiach tebeli(Abstract Table Mode). Co ciekawe Polskie znaki sa np w napisach zadeklarowanych. Nie wyświetla ich jedynie gdy musi dane zimportowac z pliku tekstowego. Nigdy wcześniej nie robiłem tekstówek, może musze jakieś kodowania ustawic. ?????????? Jak co sie robi, może jakieś pomysły bo ja ich nie ma
Powalczyłem jeszcze troche, i odkryłem że gdy usune wszystkie dane z plików i zaczne zapisywac na czysto to działa, Jednak jak te zapisane dane otworze w programie uruchamianym za pośrednictwerm Netbeans zamiast polskich znaków wyskakuja jakieś kwadraty. No i juz nic z tym nie zrobie.
I tak jest tez odwrotnie. to co zapisze za posrednictwem NetBeansa nie moge odczytac przy programie uruchamianym bezpośredni z jar (nie ma polskich znaków tylko jakieś krzaki) Co robic jakas różnica kodowań?
Hellllllllllp ? ;)
W momencie gdy czytasz plik to ustaw kodowanie strumienia na UTF-8.
A jak to sie robi? Jakiś przykład może?
Mam klase odpowiedzialna za zapis i odczyt:
public final class EmployeeListDecorator4 {
public static boolean saveList(Collection<Zlecenie> zlecenia, String fileName) {
PrintWriter writer = null;
try{
writer = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
for (Zlecenie zlecenie : zlecenia)
{
writer.println(zlecenie.get_numer());
writer.println(zlecenie.get_data_przyjecia());
writer.println(zlecenie.get_przyjal());
writer.println(zlecenie.get_serwisuje());
writer.println(zlecenie.get_data_realizacji());
writer.println(zlecenie.get_apteka());
writer.println(zlecenie.get_status());
writer.println(zlecenie.get_cel());
writer.println(zlecenie.get_rozwiazanie());
}
return true;
} catch(IOException exc) {
exc.printStackTrace();
return false;
} finally {
if(writer != null) {
writer.flush();
writer.close();
}
}
}
public static Collection<Zlecenie> readList(String fileName) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(new File(fileName)));
ArrayList<Zlecenie> list = new ArrayList<Zlecenie>();
String line = null;
String line1 = null;
String line2 = null;
String line3 = null;
String line4 = null;
String line5 = null;
String line6 = null;
String line7 = null;
String line8 = null;
while((line = reader.readLine()) != null)
{
line1=reader.readLine();
line2=reader.readLine();
line3=reader.readLine();
line4=reader.readLine();
line5=reader.readLine();
line6=reader.readLine();
line7=reader.readLine();
line8=reader.readLine();
list.add(new Zlecenie(line,line1,line2,line3,line4,line5,line6,line7,line8));
}
return list;
} catch(IOException exc) {
exc.printStackTrace();
return null;
} finally {
if(reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
A odczytuje tak :
final String fileName_zlecenia = "C:/Firma3/zlecenia.txt";
ArrayList <Zlecenie> zlecenia = new ArrayList<Zlecenie>();
//--------------------------------------------------------------------------
sam odczyt:
zlecenia = new ArrayList<Zlecenie>(EmployeeListDecorator4.readList(fileName_zlecenia));
Póżniej dane trafiaja do array listy:
dane=new String[zlecenia.size()][10]; //wiersze, kolumny
for (int i=0;i<zlecenia.size();i++)
{
for (int j=0;j<9;j++)
{
dane[i][0]=zlecenia.get(i)._numer;
dane[i][1]=zlecenia.get(i)._data_przyjecia;
dane[i][2]=zlecenia.get(i)._przyjal;
dane[i][3]=zlecenia.get(i)._serwisuje;
dane[i][4]=zlecenia.get(i)._data_realizacji;
dane[i][5]=zlecenia.get(i)._apteka;
dane[i][6]=zlecenia.get(i)._status;
dane[i][7]=zlecenia.get(i)._cel;
dane[i][8]=zlecenia.get(i)._rozwiazanie;
}
if(zlecenia.get(i)._status.equals("Zamknięte")){wielkosc_tabeli++;}
}
//-----------------------------------------------------------------------
wielkosc_tabeli=zlecenia.size()-wielkosc_tabeli;
dane2=new String[wielkosc_tabeli][10]; //wiersze, kolumny
for (int i=0;i<zlecenia.size();i++)
{
if((zlecenia.get(i)._status.equals("Zakończone"))||(zlecenia.get(i)._status.equals("Przyjęte"))||(zlecenia.get(i)._status.equals("Serwisowane")))
{
for (int j=0;j<9;j++)
{
dane2[licznik][j]=dane[i][j];
}
licznik++;
}
}
zapis to :
if(EmployeeListDecorator4.saveList(zlecenia, fileName_zlecenia))
{System.out.println("Zapisalem liste pracownikow...");}
else {System.out.println("Nie udalo sie zapisac listy pracownikow.");return;}
Jak się robi to kodowanie, nigdy tego nie robiłem ;/
Zrobiłem coś takiego przy odczycie:
reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF8"));
Ale nie działa ;/
No pewna zmiana jest, teraz to co zapisze przez NetBeansa moge odczytać odpalajac jar. Ale to co zapisze przez jar nie mogę odczytać w ponownie odpalajac jar. Ale krok w dobra strone co dalej?