singlepost

Потоки вывода в Java << На главную или назад  

Читаю из файла строки.Каждый символ строки преобразую в ascii (?, простым (int) ) код.Далее добавляю некое число и опять преобразую в символ.Но вместо каких-то карлючек ( которые я наблюдаю в лейбле ) в выходном файле вижу только знаки вопроса, да и символ "\n" тоже не корректно записывается, перехода на новую строку нету.
Подскажите каким потоком вывода воспользоваться чтобы отображало в выходном файле то что надо.
Пробовал
BufferedWriter
PrintWriter
FileWriter
ничего не помогло ( или я неправильно использовал).

21 ответов в теме “Потоки вывода в Java”

  1. 6
    Роман Яворский ответил:

    Спасибо.
    Будем разбираться.

  2. 5
    Максим Потанин ответил:

    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. тогда при втором прогоне они сыграют роль разделителей строки, которых не было.

    вывод – шифровать по строкам вообще говоря неправильно. неправильно выделять переводы строки.

  3. 4
    Роман Яворский ответил:

    Вот код который должен считывать, обрабатывать и записывать строки в файл.

    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 возвращает правильную ( смотрел в дебаге ).

  4. 3
    Максим Потанин ответил:

    Предоставь минимальный код, достаточный для запуска программы и воспроизведения ошибки.
    Мне из того как ты потоки объявлял мало что понятно. Да и кажись не в них дело.
    Интересует что происходит со строкой и так далее.

  5. 2
    Роман Яворский ответил:

    не,после преобразований перед записью в файл вывожу на экран, так что оно правильно делает все.Вопрос в том, почему оно в файл записывает не то.
    Вот кусочек кода:

    Собственно такими потоками пользовался

    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)

  6. 1
    Максим Потанин ответил:

    код в студию, проще будет.

    а вообще – где-то что-то теряешь при преобразованиях между типами.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.