Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Запись в файл с переходом на другую строку


Автор: Syltan 22.6.2010, 11:34
Не происходит переход на др. строку каждой строчки, при записи в файл test1, вот пишу такой код:
Код

package u;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class IOClass {
    public static void main(String[] args) throws FileNotFoundException, IOException {      
        IOClass io = new IOClass();
        //Читать из файла
        //Писать в файл  
        io.processingFiles();
     }

    private void processingFiles() throws FileNotFoundException, IOException {
        FileReader fr = new FileReader("G:\\temp\\test.txt");
        BufferedReader br = new BufferedReader(fr);
        String str = br.readLine();
        String result = "";
        while (str != null) {
            result += "\n"+ str;
            str = br.readLine();
            //System.out.println();
        }
        FileWriter fw = new FileWriter("G:\\temp\\test1.txt");
        fw.write(result);
        fw.close();
        fr.close();
        br.close();
    }
    
}



Автор: Skipy 22.6.2010, 12:02
Вопрос на засыпку. Какое сочетание символов переводит строку в Windows? Это первое.

Второе. Сложение строк в цикле - лучший способ убить производительность. Используйте StringBuilder.

Автор: chaos 22.6.2010, 13:13
Цитата(Skipy @  22.6.2010,  09:02 Найти цитируемый пост)
Какое сочетание символов переводит строку в Windows? 

\n

Автор: AbdulBcex 22.6.2010, 16:14
Вот кстати "\n" помогает не всегда.
Сам лично сталкивался, к примеру:
Код

FileWriter fw = new FileWriter(setup, false);
BufferedWriter bf = new BufferedWriter(fw);
....
bf.write(element.name() + " (" + element.type() + ")\r\n");
bf.write(element1.name() + " (" + element2.type() + ")\r\n");
...


Если все эти строки выводить в .txt файл, то  перехода с помощью "\n" не будет. Выручит только добавление "\r" - символа возврата каретки.

Что это так, знаю, но не особо уверен почему. Наверное, связано с тем, что в конструкторе FileWriter атрибут append обозначен как false. Если кто лучше знает, поправьте, пожалуйста.

Автор: Dummy 22.6.2010, 16:56
Есть метод BufferedWriter.newLine(), который и пишет платформенно-зависимый разделитель строк в нижележащий Writer.

Код

FileWriter fw = new FileWriter(setup, false);
BufferedWriter bf = new BufferedWriter(fw);
....
bf.write(element.name() + " (" + element.type() + ")");
bf.newLine();
bf.write(element1.name() + " (" + element2.type() + ")");
bf.newLine();


Если не хочется использовать BufferedWriter, то можно использовать System.getProperty("line.separator") - он вернёт заветную последовательность символов для перевода строки. По спеке, BufferedWriter.newLine() использовует именно это свойство.

Автор: Syltan 22.6.2010, 17:14
Подскажите, как в данном коде сделать так, чтоб записывалось в файл текст1.тхт то, что я введу с клавиатуры в массиве этой программы.

Код

package u;
//Нужен для того чтоб можно было хранить строки в себе
import java.io.BufferedReader;
//Это исключение создается, когда попытка доступа к файлу,
//не существующему на диске, заканчивается неудачей
import java.io.FileNotFoundException;
//Чтоб можно было чиать тектсовой файл
import java.io.FileReader;
//Чтоб можно было записывать в  тексотовой файл
import java.io.FileWriter;
import java.io.IOException;

public class IOClass {
final private static int N = 50;
    final private static java.io.BufferedReader jin =
// new java.io.InputStreamReader(System.in) – это ссылка на объект класса InputStream
//в качестве параметра конструктора BufferedInputStream
        new java.io.BufferedReader(new java.io.InputStreamReader(System.in));

  private double processingFiles(double t1, double t2) throws FileNotFoundException, IOException {
        //Указываю путь на который будет ссылаться объект fr

        FileReader fr = new FileReader("G:\\temp\\test.txt");
        //Объект br будет хранить в себе строки на которые ссылается объект fr
        BufferedReader br = new BufferedReader(fr);
        //Переменная str получает содержимое файла
        String str = br.readLine();
        String result = "";
        //Пока переменная str не равна нулевой строке из файла test.txt
        while (str != null) {

        //lineSeparator - Переменная которая будет делать перевод строки
            String lineSeparator = System.getProperty("line.separator");
             //Тогда в перменную result которая изначально равна нулю
            //присвоить эту строку и записать  в эту перменную
            result += lineSeparator+ str;
            //Снова прочитать строку
            str = br.readLine();
            //System.out.println();
        }
        //Создается обьект типа FileWriter
       //Его конструктору передается имя файла, чтоб
       //сразу его создать и открыть для записи

        FileWriter fw = new FileWriter("G:\\temp\\test1.txt");
        //Записываем в текстовой файл test1 содержимое всех строки из файла test.txt
        fw.write(result);
        //Закрываем потоки
        fw.close();
        fr.close();
        br.close();
        return 0;
    }

    private static double min_rad(double x[], double y[], int n)  {
        double min = 0;
        double temp;
        int i;
                for (i = 0; i < n; i++)
               //Если значание темп больше минимума
            if ((temp = Math.sqrt(x[i] * x[i] + y[i] * y[i])) > min)
                    //Тогда минимуму присвоить темп
            min = temp;
        return min; //Вызвать минимум и передать аргументом функции
    }
    public static void main(String[] args) throws java.io.IOException {
            IOClass io = new IOClass(); 
            int n;
             //Объявляю 2 масива которыее могут содержать
            //не более 50 действительных чисел каждый
        double x[] = new double[N],
               y[] = new double[N];
        double radius;
        int i;
        System.out.print("Input n: ");
            //Здесь происходит ввод количества натуральных чисел
        n = Integer.parseInt(jin.readLine());

            //Цикл нужен для того, чтоб каждое число мы вводили с клавиатуры
        for (i = 0; i < n; i++)
        {
         System.out.print("Input x[" + i + "]: ");

         x[i] = Double.parseDouble(jin.readLine());
            System.out.print("Input y[" + i + "]: ");
            y[i] = Double.parseDouble(jin.readLine());
                io.processingFiles(x[i], y[i]);
        }


            //Вызываю функцию min_rad и присваиваю её значение перменной radius
            radius = min_rad(x, y, n);
            //Вывожу радиус найменьшего круга
            System.out.println("Minimum radius: " + radius);
            System.out.println("Введите строку");
        }
}




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)