Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/35: Рейтинг темы: голосов - 35, средняя оценка - 4.77
0 / 0 / 1
Регистрация: 03.06.2012
Сообщений: 27

Как осуществить дозапись в файл

12.10.2012, 22:31. Показов 7513. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема следующая:
Когда запускаю следующую программу и печатаю в файл example.dat несколько раз (После каждого раза вставляю разделитель "|") то каждый следующий раз переписывает все что было написано до него (мне нужно чтобы новая запись дописывалась а не переписывалась).

Допустим пишу 1| потом 2|...3|...4|, потом вывожу на консоль все что есть в файле и а там только 4|.
Помогите пожалуйста, возможно это из-за того что программа выполнена в виде окна с кнопкой которая вызывает инпут-диалог (когда печатаю просто из программы несколько раз все хорошо, и ничего не переписывается). Но мне нужно чтобы именно так работало.

Если что-то непонятно, запустите код и нажмите на кнопку на фрейме "Add" и в диалоге введите что угодно. Потом ОК и еще раз "Add" и так несколько раз...
Потом закройте программу и запустите вновь, на консоль должно вывестись все содержимое example.dat и как вы увидите это будет ТОЛЬКО последний добавленный компонент.

Заранее спасибо за помощь.

КОД:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
 
 
public class Example 
{
    public static void main(String[] args) 
    {
        //Создаем фрейм
        JFrame frame = new JFrame();
        //Создаем контейнер
        Container pane = frame.getContentPane();
 
        //Создаем кнопку...
        JButton addCategory = new JButton("Add");
        //...и слушатель событий
        addCategory.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent event)
                {
                    //Создаем строковую переменную в которую помещаем результат диалога с пользователем
                    String newCategory = JOptionPane.showInputDialog("Name of new ",null);
                    //Если пользователь хоть что-то ввел то...
                    if(newCategory!=null)
                    {
                        try 
                        {
                            //Записываем значение этой переменной в файл .дат с пометкой КИРИЛЛИЦА "Ср1251" + знак "|"
                            OutputStreamWriter  osw = new OutputStreamWriter(new 
                                    FileOutputStream("example.dat"),"Cp1251");
                            PrintWriter out = new PrintWriter(osw);
                            out.print(newCategory+"|");
                            out.close();
                        }
                        //Ловим исключение
                        catch (IOException e){}
                    }
                }
            }); 
        //Добавляем кнопку в контейнер и тп
        pane.add(addCategory);
        frame.pack();
        frame.setSize(200,100);
        //Окно на экран
        frame.setVisible(true);
        
        
        //Питаемся все считать
        try 
        {
            InputStreamReader isr = new InputStreamReader(new 
                    FileInputStream("example.dat"),"Cp1251");
            BufferedReader in = new BufferedReader(isr);
            String print = in.readLine();
            in.close();
            System.out.println(print);
        }
        catch (IOException e){}
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2012, 22:31
Ответы с готовыми решениями:

Как осуществить дозапись в файл
private void button1_Click(object sender, EventArgs e) { int index = listView1.Items.Add(textBox1.Text).Index; ...

Как осуществить дозапись в файл
Здравствуйте. Столкнулся с очередной проблемой. Моя задача - записать в файл данные. Самый простой пример: private void...

Как осуществить дозапись в уже имеющийся файл
Здравствуйте Как добавить запись в файл с расширением "txt" но при этом чтобы другие не удалялись ? И также отдельной командой...

13
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
13.10.2012, 12:07
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
 
public class RaFile {
    static JFrame frame;
 
    public static void main(String[] args) {
        // Создаем фрейм
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Создаем контейнер
        Container cont = frame.getContentPane();
        cont.setLayout(new BorderLayout());
 
        // Создаем кнопку...
        JButton addCategory = new JButton("Add");
        JButton readAllCategory = new JButton("ReadCategory");
        // ...и слушатель событий
        addCategory.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                // Создаем строковую переменную в которую помещаем результат
                // диалога с пользователем
                String newCategory = JOptionPane.showInputDialog("Name of new ", null);
                // Если пользователь хоть что-то ввел то...
                if (newCategory != null) {
                    try {
                        // Записываем значение этой переменной в файл .дат с
                        // пометкой КИРИЛЛИЦА "Ср1251" + знак "|"
                        File f = new File("example.dat");
                        RandomAccessFile out = new RandomAccessFile(f, "rw");
                        out.seek(f.length());
                        out.write((newCategory + "|").getBytes("Cp1251"));
                        out.close();
                    }
                    // Ловим исключение
                    catch (IOException e) {
                    }
                }
            }
        });
 
        readAllCategory.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Питаемся все считать
                try {
                    InputStreamReader isr = new InputStreamReader(new FileInputStream("example.dat"), "Cp1251");
                    BufferedReader in = new BufferedReader(isr);
                    String print = in.readLine();
                    isr.close();
                    JOptionPane.showConfirmDialog(frame, print);
                } catch (IOException ie) {
                    ie.printStackTrace();
                }
            }
        });
 
        // Добавляем кнопку в контейнер и тп
        cont.add(addCategory, BorderLayout.NORTH);
        cont.add(readAllCategory, BorderLayout.SOUTH);
        frame.pack();
        frame.setSize(200, 100);
        // Окно на экран
        frame.setVisible(true);
 
    }
}
2
0 / 0 / 1
Регистрация: 03.06.2012
Сообщений: 27
13.10.2012, 19:17  [ТС]
Спасибо за ответ. Я примерно понял, но не могли бы вы подсказать:
Java
1
2
3
RandomAccessFile out = new RandomAccessFile(f, "rw");
out.seek(f.length());
out.write((newCategory + "|").getBytes("Cp1251"));
Что в первой строчке значит "rw"?
Во второй мы ищем конец строки, как я понимаю?
Как работает метод .getBytes("Cp1251"), я и до этого не сильно понимал этот код...

Заранее спасибо.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
13.10.2012, 19:20
Цитата Сообщение от romanastya Посмотреть сообщение
Что в первой строчке значит "rw"?
режим чтение и запись
Цитата Сообщение от romanastya Посмотреть сообщение
Во второй мы ищем конец строки, как я понимаю?
переходим на конец файла
Цитата Сообщение от romanastya Посмотреть сообщение
Как работает метод .getBytes("Cp1251"), я и до этого не сильно понимал этот код...
этот метод конвертирует строку из UTF-16 (которая в яве) в кодировку Ср1251 и потом делает из неё массив байт
1
0 / 0 / 1
Регистрация: 03.06.2012
Сообщений: 27
14.10.2012, 01:02  [ТС]
Спасибо. А не подскажете еще пожалуйста, как записывать данные в файл в определенной директории которая тоже должна быть создана по средствам программы?

Например, выводится диалог, получаем строку от пользователя.
String userInput;
И теперь хочу записать ее в новый каталог в файл с одноименными именами:
userInput+"/"+userInput+".dat"
Как так сделать? Когда использую команду:
Java
1
2
3
4
5
File file = new File(userInput+"/"+userInput+".dat");
RandomAccessFile out = new RandomAccessFile(file, "rw");
out.seek(file.length());
out.write((userInput + "|").getBytes("Cp1251"));
out.close();
То ничего не создается.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.10.2012, 02:03
сначала создайте директорию (и паренты) при помощи
http://docs.oracle.com/javase/... ml#mkdirs()
0
0 / 0 / 1
Регистрация: 03.06.2012
Сообщений: 27
15.10.2012, 01:09  [ТС]
Спасибо. Разобрался.
Вы не могли бы заглянуть вот в эту мою новую тему?
https://www.cyberforum.ru/java... ost3562210
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
15.10.2012, 12:03
Цитата Сообщение от mutagen Посмотреть сообщение
Java
1
2
3
4
5
File f = new File("example.dat");
RandomAccessFile out = new RandomAccessFile(f, "rw");
out.seek(f.length());
out.write((newCategory + "|").getBytes("Cp1251"));
out.close();
А зачем так сложно-то? Не проще FileOutputStream с append=true?
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
15.10.2012, 12:26
Цитата Сообщение от Skipy Посмотреть сообщение
А зачем так сложно-то? Не проще FileOutputStream с append=true?
Проще, но я про это как-то забыл ) Наверное привычка работать с изначально более навороченными классами. Оптимизация потом.
0
0 / 0 / 1
Регистрация: 03.06.2012
Сообщений: 27
15.10.2012, 13:49  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
А зачем так сложно-то? Не проще FileOutputStream с append=true?
А можно, пожалуйста, пример с append=true?
Если вы имеете в виду это:
Java
1
2
3
4
FileOutputStream fos = new FileOutputStream("allCategories.dat");
                            OutputStreamWriter osr = new OutputStreamWriter(fos,"Cp1251");
                            PrintWriter out = new PrintWriter(osr);
                            out.append("Some text"+"|");
То это не работает, все равно все переписывает в файле заново.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
15.10.2012, 14:23
Java
1
FileOutputStream fos = new FileOutputStream("allCategories.dat", true);
1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
15.10.2012, 17:25
Нет, я имел в виду
Java
1
new FileOutputStream("allCategories.dat", true)
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
15.10.2012, 17:41
Цитата Сообщение от Skipy Посмотреть сообщение
Нет, я имел в виду
а я в предыдущем сообщении тогда ваще непонятно что имел в виду получается
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
16.10.2012, 10:34
Цитата Сообщение от mutagen Посмотреть сообщение
а я в предыдущем сообщении тогда ваще непонятно что имел в виду получается
Я отвечал на сообщение на предыдущей странице, без цитирования, и не видел, что на следующей уже такой ответ есть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2012, 10:34
Помогаю со студенческими работами здесь

Как осуществить запись(дозапись) в файл в отдельном потоке и закрыть его после записи?
Здравствуйте! Вопрос в названии темы! Подробнее планирую записывать(дозаписывать) в файл массив double doubleArray. Этот массив будет...

Осуществить дозапись в файл
Подготовить файл, содержащий набор символов, и написать программу, добавляющую в этот файл еще несколько строк с символами.

Осуществить дозапись в файл
В общем есть 2 кнопки. На одной мне надо записать в файл 4 символа (пусть будет qwer) так, чтобы строчка осталась на месте. Просто у меня...

Осуществить дозапись в файл
Здравствуйте. У меня такая проблема. Пишу игру, в ней надо записывать результаты игры. Как бы создаю таблицу рекордов. Записываю в...

Осуществить дозапись в файл
Вот сам код(некоторое не исправил). Проблема в том,что не понятно мне,почему она " text" не считает за тип данных,а без него я не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru