Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
7 / 7 / 4
Регистрация: 07.07.2011
Сообщений: 583
1

Работа с файлами (обновление данных)

10.02.2017, 08:07. Показов 565. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Как вы думаете, возможно ли заменить данные в файле не переписывая весь файл? То есть например есть файл с такими записями
C
1
2
3
вася>31
петя>35
даня>33
и в строке петя>35 нужно заменить 35 на 65. Самый производительный способ, который мне удалось найти - это про сканировать построчно файл -найти имя "петя", заменить строку и вписать в файл как то так
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
 public static void main(String[] args) throws IOException {
Preferences prefs=new Preferences();prefs.getPreferences("SNamesn");
prefs.putInteger("петя",65);...
public class Preferences {
PrintWriter out=null;
public void putInteger(String namen, int newint) throws IOException {
    File file = new File(fileNameintsn);String new_text="";// новый текст который мы впишем в файл
new_text=NewText(namen,newint); // смотрите метод ниже
    try {
          //проверяем, что если файл не существует то создаем его
        if(!file.exists()){
            file.createNewFile();
        }
         //PrintWriter обеспечит возможности записи в файл
       if(out==null)out = new PrintWriter(file.getAbsoluteFile());
try{
        
            //Записываем текст в файл
             out.print(new_text);
    } 
    finally {
        //После чего мы должны закрыть файл
        //Иначе файл не запишется
      //  out.close();
    }   
    }  catch(IOException e) {
        throw new RuntimeException(e);
    }
                 }
private boolean name_is_found;// условие определяющие найдено имя "петя" или нет
public String NewText(String namen,int newint) throws IOException {
    name_is_found=false;String text_of_line="";
    StringBuilder newtext = new StringBuilder();
    Scanner scanner = new Scanner(Paths.get(fileNameintsn));
    scanner.useDelimiter(System.getProperty("line.separator"));
while(scanner.hasNext()){text_of_line=scanner.next();if(namen.matches(find_name_in_line(text_of_line)))name_is_found=true;
    if(!name_is_found)newtext.append(text_of_line);else newtext.append(namen+">"+newint);newtext.append("\n");
  }
    //если запись отсутствует, то добавляем запись в текст
    if(!name_is_found){newtext.append(namen+">"+newint); newtext.append("\n");}
   // newtext.append("nn");newtext.append("cn");newtext.append("bn");System.out.println(newtext);
    scanner.close();
return newtext.toString();
}
public String find_name_in_line(String line) {
    Scanner scanner = new Scanner(line); 
    scanner.useDelimiter(">");
String name = scanner.next();//scanner.close();
return name;
          }
То есть получается для того чтобы заменить один символ - нужно перезаписывать весь файл, это не только удар по производительности но и вообще как то мягко говоря нелепо. Как вы думаете, существует ли иной способ решения?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2017, 08:07
Ответы с готовыми решениями:

Работа с файлами, чтение данных, вывод данных в массив
Ребят, нужна Ваша помощь, только начинаю изучать программирование. Хочу написать по типу...

работа с файлами данных
В задаче у меня стоит пункт считать элементы файла в массив ... как это сделать?

Работа с файлами данных
Средствами текстовых редакторов подготовить файл, содержащий два столбика числовых значений...

EF работа с файлами и базой данных
Добрый день. Есть программа, в ней присутствуют объекты, к каждому объекту должен быть прикреплён...

1
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
10.02.2017, 09:15 2
используй отображение файлов память. прочитать нужные байты из файла в память точно может, записать вроде тоже. только соответственно ограничение, заменить Х количество символов(байт) можно только на Х количество символов(байт), не больше, не меньше. иначе только перезаписывать весь файл с места вставки/замены
0
10.02.2017, 09:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2017, 09:15
Помогаю со студенческими работами здесь

Работа с консолью (обновление данных в консоли)
Здравствуйте, как можно с помощью vb.net в консоли обновлять отдельные данные. Например, в консоли...

Работа с ajax. Обновление данных на странице
Имеются два файла Основной: <!DOCTYPE html> <html> <head> <meta charset="utf-8">...

Работа с файлами (запись/чтение данных из бд)
Здравствуйте. Есть код(рабочий) #include <conio.h> #include <iostream.h> #include <time.h>...

Работа с файлами (запись данных, сортировка)
Здравствуйте, помогите пожалуйста с заданием: написать программу, которая запрашивает у...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru