Здравствуйте!
Подскажите, пожалуйста, как решить следующую проблему. Программа для учета трансфузионных сред и оформления разных протоколов при их использовании (написана на Java) берет строки из текстового файла (текст-шаблон в кодировке UTF-8), дополняет их данными и выводит в другой текстовый файл. Программа написана в Eclipse (кодировка UTF-8). В самой среде Eclipse программа отрабатывает без проблем: создается именованный текстовый файл с правильно подставленными данными. Но при создании "runnable jar file" (и я подозреваю, что экзешник тоже так себя будет вести) программа запускается, но данные не добавляются, и выводится в файл только исходный шаблон, без расчетных данных! Только если текст-шаблон имеет кодировку ANSI, то программа отрабатывает на ура. Но есть одно "но": часть текста-шаблона имеет казахские буквы, и они тогда выводятся неправильно....
На всякий случай привожу часть кода (предупреждаю, что я не профессиональный программист, а врач, так что сильно не смейтесь, если что не так))):
spoilerpublic static void printEritr(){
if (!dir_Blooder.exists())
dir_Blooder.mkdir();
if (!dir_Base.exists())
dir_Base.mkdir();
File fileWriteIn = new File("C:/Users/Public/Blooder/Base/transit.txt");
File fileReadOut = new File("C:/Users/Public/Blooder/Docs/formEritr.txt");
String line = "";
try {
FileReader fileRead = new FileReader(fileReadOut);
BufferedReader buffReader = new BufferedReader(fileRead);
FileWriter fileWrit = new FileWriter(fileWriteIn);
BufferedWriter buffWriter = new BufferedWriter(fileWrit);
while ((line = buffReader.readLine()) != null) {
if (line.contains("Ф.И.О. больного")) line += " " + name.toUpperCase();
if (line.contains("Дата рождения")) line += " " + Blood_Patient.comboDay[0].getSelectedItem() + " "
+ Blood_Patient.comboMonth[0].getSelectedItem()
+ " " + Blood_Patient.comboYear[0].getSelectedItem() + " года.";
if (line.contains("Дата проведения трансфузии")) {
line += " " + Blood_Patient.comboDay[1].getSelectedItem()+ " " + Blood_Patient.comboMonth[1].getSelectedItem()
+ " " + Blood_Patient.comboYear[1].getSelectedItem() + " года.";
buffWriter.write(line);
buffWriter.newLine();
continue;
}
if (line.contains("начата")) line = " басталды (начата): " + Blood_Patient.startHour + /*Blood_Patient.comboHour.getSelectedItem() +*/ " сағат (час) "
+ Blood_Patient.startMinutes /*Blood_Patient.comboMinute.getSelectedItem()*/ + " минут (минута)";
if (line.contains("окончена")) line = " аяқталды (окончена): " + Blood_Patient.endHour + " сағат (час) " + Blood_Patient.endMinutes + " минут (минута)";
if (line.contains("Группа крови и резус-принадлежность больного")) {
buffWriter.write(line);
buffWriter.newLine();
buffWriter.write(Blood_Patient.comboGroup.getSelectedItem() + "");
buffWriter.newLine(); buffWriter.newLine();
continue;
}
if (line.contains("Отделение больницы")) line += " " + Blood_Patient.valDepart.toUpperCase();
if (line.contains("истории болезни")) line += " " + Blood_Patient.tf_NumOfCase.getText();
if (line.contains("До трансфузии")) line = "Трансфузияға дейін (До трансфузии): АҚ (АД) " + Blood_Patient.indexOfLife[0][0] + " и "
+ Blood_Patient.indexOfLife[0][1] + " мм рт. ст," + " Ps " + Blood_Patient.indexOfLife[0][2]
+ " в минуту," + "T тела " + Blood_Patient.indexOfLife[0][3];
if (line.contains("Трансфузионный анамнез")) line += " " + Blood_Patient.valAnamnes.toUpperCase();
if (line.contains("Показания к трансфузии")) line += " " + Blood_Patient.comboDiagnose.getSelectedItem();
if (line.contains("Наименование трансфузионной среды")) {
buffWriter.write(line);
buffWriter.newLine();
buffWriter.write("Э Р И Т Р О Ц И Т Н А Я В З В Е С Ь");
buffWriter.newLine(); buffWriter.newLine();
continue;
}
if (line.contains("Группа крови и резус-принадлежность донора")) {
buffWriter.write(line);
buffWriter.newLine();
if (Blood_Preparat.groupOfDonor.contains("полож"))
buffWriter.write(Blood_Preparat.groupOfDonor.replace(".", "ительный") + "");
else buffWriter.write(Blood_Preparat.groupOfDonor.replace(".", "ательный") + "");
buffWriter.newLine(); buffWriter.newLine();
continue;
}
if (line.contains("Номер этикетки трансфузионной среды")) line += " " + Blood_Preparat.tf_Code.getText();
if (line.contains("Наименование организации")) {
buffWriter.write(line);
buffWriter.newLine();
buffWriter.write("К А Р А Г А Н Д И Н С К И Й О Б Л А С Т Н О Й Ц Е Н Т Р К Р О В И");
buffWriter.newLine(); buffWriter.newLine();
continue;
}
if (line.contains("Дата заготовки")) line += " " + "09 сентября 1972 года";
if (line.contains("по группе крови")) line += " " + "С О В М Е С Т И М А";
if (line.contains("по резус-фактору")) line += " " + "С О В М Е С Т И М А";
if (line.contains("проводившего пробы")) line += " " + Blood_Patient.nameOfDoctor;
if (line.contains("биологическая проба")) line += " " + "С О В М Е С Т И М А";
if (line.contains("Перелито")) line = "Құйылған (Перелито): " + Blood_Preparat.listPrep.getSelectedValue() + " миллилитр (мл)";
if (line.contains("капельно-струйно – нужное подчеркнуть")) line += " " + Blood_Patient.valInjection.toUpperCase();
if (line.contains("Реакции")) line += " " + Blood_Patient.valComplication.toUpperCase();
if (line.contains("Предпринятые меры")) line += " " + Blood_Patient.valMeasures.toUpperCase();
if (line.contains("проводившего трансфузию")) {
buffWriter.write(line);
buffWriter.newLine();
buffWriter.write(" " + Blood_Patient.nameOfDoctor);
buffWriter.newLine(); buffWriter.newLine();
continue;
}
if (line.contains("После трансфузии")) line = "Трансфузиядан кейін (После трансфузии): АҚ (АД) " + Blood_Patient.indexOfLife[1][0] + " и "
+ Blood_Patient.indexOfLife[1][1] + " мм рт. ст," + " Ps " + Blood_Patient.indexOfLife[1][2]
+ " в минуту," + "T тела " + Blood_Patient.indexOfLife[1][3];
if (line.contains("через 1 час")) line = "1 сағаттан кейін (через 1 час): АҚ (АД) " + Blood_Patient.indexOfLife[2][0] + " и "
+ Blood_Patient.indexOfLife[2][1] + " мм рт. ст," + " Ps " + Blood_Patient.indexOfLife[2][2]
+ " в минуту," + "T тела " + Blood_Patient.indexOfLife[2][3];
if (line.contains("через 2 часа")) line = "2 сағаттан кейін (через 2 часа): АҚ (АД) " + Blood_Patient.indexOfLife[3][0] + " и "
+ Blood_Patient.indexOfLife[3][1] + " мм рт. ст," + " Ps " + Blood_Patient.indexOfLife[3][2]
+ " в минуту," + "T тела " + Blood_Patient.indexOfLife[3][3];
if (line.contains("через 3 часа")) line = "3 сағаттан кейін (через 3 часа): АҚ (АД) " + Blood_Patient.indexOfLife[4][0] + " и "
+ Blood_Patient.indexOfLife[4][1] + " мм рт. ст," + " Ps " + Blood_Patient.indexOfLife[4][2]
+ " в минуту," + "T тела " + Blood_Patient.indexOfLife[4][3];
if (line.contains("Цвет")) line += " светло-желтая";
if (line.contains("Суточный диурез")) line += " " + Blood_Patient.valDiurez + " мл";
if (line.contains("медсестры")) line += " Петровская А.Г.";
if (line.contains("дата, время")) line += " " + Blood_Patient.comboDay[1].getSelectedItem() + " " + Blood_Patient.comboMonth[1].getSelectedItem()+ " "
+ Blood_Patient.comboYear[1].getSelectedItem() + " года, " + Blood_Patient.comboHour.getSelectedItem()
+ ":" + Blood_Patient.comboMinute.getSelectedItem();
buffWriter.write(line);
buffWriter.newLine();
//buffWriter.newLine();
}
buffReader.close();
buffWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar dating = Calendar.getInstance();
SimpleDateFormat formating = new SimpleDateFormat("YYYY-MM-dd, HH-mm-ss");
String timeOfFile = formating.format(dating.getTime()) ;
File fileSave = new File("C:/Users/Public/Blooder/Base/" + name);
if (!fileSave.exists())
fileSave.mkdir();
//File fileInBase = new File("C:/Users/Public/Blooder/Base/" + name +"/" + name + "_" + date.getYear()+ "_" + date.getMonthValue() + "_" + date.getDayOfMonth() + ".txt");
fileWriteIn.renameTo(new File("C:/Users/Public/Blooder/Base/" + name +"/" + name + "_" + timeOfFile + ".txt"));
if (Desktop.isDesktopSupported())
desktop = Desktop.getDesktop();
if (desktop.isSupported(Desktop.Action.EDIT))
try {
desktop.edit(new File("C:/Users/Public/Blooder/Base/" + name +"/"+ name + "_" + timeOfFile + ".txt"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};