Читаю из файла строки.Каждый символ строки преобразую в ascii (?, простым (int) ) код.Далее добавляю некое число и опять преобразую в символ.Но вместо каких-то карлючек ( которые я наблюдаю в лейбле ) в выходном файле вижу только знаки вопроса, да и символ "\n" тоже не корректно записывается, перехода на новую строку нету.
Подскажите каким потоком вывода воспользоваться чтобы отображало в выходном файле то что надо.
Пробовал
BufferedWriter
PrintWriter
FileWriter
ничего не помогло ( или я неправильно использовал).
27 января 2009 в 13:02
Спасибо.
Будем разбираться.
27 января 2009 в 12:03
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
final BufferedReader br = new BufferedReader(new FileReader("in.txt"));
final FileWriter w = new FileWriter("out.txt");
final String key = "secret";
final Coder coder = new Coder();
String str;
while ((str = br.readLine()) != null) {
w.write(coder.Code1(str, key));
w.write(System.getProperty("line.separator"));
}
w.close();
}
}
class Coder {
String Code1(final String inStr, final String keyStr) {
final byte[] in = inStr.getBytes();
final byte[] key = keyStr.getBytes();
final byte[] result = new byte[in.length];
for (int i = 0; i < in.length; i++) {
result[i] = (byte) (in[i] ^ key[i % key.length]);
}
return new String(result);
}
}
вот смотри. работает. из одного в другой. и из второго в третий. первый равен третьему. не считая краеугольных случаев, когда во второй файл ляжет символ 13 или 10. тогда при втором прогоне они сыграют роль разделителей строки, которых не было.
вывод – шифровать по строкам вообще говоря неправильно. неправильно выделять переводы строки.
27 января 2009 в 10:00
Вот код который должен считывать, обрабатывать и записывать строки в файл.
String fileName = new String("d:\\test.txt");
BufferedReader in = null;
BufferedWriter out = null;
//StringReader in = null;
//StringWriter out = null;
//PrintWriter fileOut = null;
String sIn = new String();
String sOut = new String();
String outFileName = new String(fileName);
int pos = outFileName.indexOf(".");
outFileName = outFileName.substring(0,pos);
outFileName += "_up.txt";
try
{
in = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
// out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFileName)));
out = new BufferedWriter(new FileWriter(outFileName));
//fileOut = new PrintWriter( new FileWriter(outFileName));
while (in.ready())
{
sIn = in.readLine();
// fileOut.println(sOut);
sIn = coder.Code1(sIn, key);
out.write(sIn);
out.write("\n");
out.flush();
}
} catch (IOException e)
{// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
in.close();
out.close();
//fileOut.close();
} catch (IOException e)
{// TODO Auto-generated catch block
e.printStackTrace();
}
Строку ф-ция code1 возвращает правильную ( смотрел в дебаге ).
27 января 2009 в 6:01
Предоставь минимальный код, достаточный для запуска программы и воспроизведения ошибки.
Мне из того как ты потоки объявлял мало что понятно. Да и кажись не в них дело.
Интересует что происходит со строкой и так далее.
26 января 2009 в 22:02
не,после преобразований перед записью в файл вывожу на экран, так что оно правильно делает все.Вопрос в том, почему оно в файл записывает не то.
Вот кусочек кода:
Собственно такими потоками пользовался
BufferedWriter out = null;
…..
//out = new BufferedWriter(new OutputStreamWriter(new //FileOutputStream(outFileName)));
out = new BufferedWriter(new FileWriter(outFileName));
//fileOut = new PrintWriter( new FileWriter(outFileName));
а так записывал :
out.write(String)
26 января 2009 в 19:05
код в студию, проще будет.
а вообще – где-то что-то теряешь при преобразованиях между типами.