Java: запись массива в несоответствия текстовых файлов - PullRequest
0 голосов
/ 14 декабря 2010

Для проекта класса мы с группой работали над приложением, которое читает строки текста из текстового файла и может зашифровать его, расшифровать его (оба с помощью DES) и вычислить хеш MD5. Программа хорошо читает текст и шифрует его, записывая массив зашифрованных строк обратно в текстовый файл в том порядке, в котором они были прочитаны, строка за строкой со всеми необходимыми возвратами каретки.

Однако при расшифровке этих строк программа записывает открытый текст в файл одной строкой без пробелов и возврата каретки. Оба метода encrypt и decrypt используют один и тот же класс fileWrite, который использует буферизованную программу записи. Я добавил оператор System.out.println для целей отладки, чтобы распечатать содержимое массивов, поскольку они шифруются и дешифруются для проверки ошибок в хранилище, но я не могу их найти.

Даже когда я искусственно вставляю символы возврата каретки с помощью символа "\ n", текстовый файл после дешифрования занимает одну строку. Я не могу понять, почему один и тот же класс ведет себя по-разному в разное время. Код для записи массива в файл достаточно прост и просто обрабатывает элемент за элементом, и, вероятно, его не нужно включать, но в любом случае это так.

    for(int i=0;i<s.length;i++){
    bufferedWriter.write(s[i]);             
    }

Исходя из того, что я могу понять, проблема потенциально связана с тем, как java и блокнот обрабатывают новые строки по-разному. Когда он читает строки открытого текста из файла, я предполагаю, что он получает разрывы строк из текстового файла и печатает зашифрованный текст таким образом, но здесь java обозначает новую строку иначе, чем она была изначально в файле, Это приводит к проблеме пробелов, когда эти зашифрованные строки затем читаются и обрабатываются, но, опять же, я не совсем уверен, поэтому я здесь. Любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 14 декабря 2010

Попробуйте использовать PrintWritter, если можете, используя метод println ().

Я полагаю, что метод write () не изменяет строки, вы можете форсировать это с помощью метода newLine ().

Также обратите внимание, что при чтении из файла большинство методов не возвращают перевод строки.

1 голос
/ 14 декабря 2010

Я предполагаю, что вы используете BufferedReader (который удаляет символы новой строки) и записываете чтение строки, не пытаясь восстановить символы новой строки.(Или добавление новых строк не работает, потому что вы говорите, что их здесь нет)

Вместо использования BufferedReader лучше обрабатывать файл как двоичный файл, считывая блоки за раз, и если это окажется текстомэто будет неизменным.С текстом вы не можете гарантировать, что \ r \ n или \ n или \ r будут воссозданы так, как они были в исходном файле.Если вы кодируете и декодируете текст в разных системах, кодировка символов может отличаться.;)

0 голосов
/ 14 декабря 2010

Возможно, вы забыли очистить и / или закрыть Writer в конце?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...