Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/26: Рейтинг темы: голосов - 26, средняя оценка - 4.50
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280

Не получается: Создать программой .txt и написать несколько строк, поменять в нем 2 строку на другую, в 3 строке

16.11.2018, 15:38. Показов 5345. Ответов 61
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла серьезная проблема при создании кода для лабораторной работы:
Суть работы такова:

Создать программой .txt и написать несколько строк в файл вручную через консоль,
Поменять в нем 2 строку на другую, поменять в 3 строке второе слово (все без перезаписи файла)

потом работа с двоичным файлом: поменять 2 байта в двоичном файле.

Main.java:

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
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        //подсказки для ДЗ: для реализации ввести в поиск java get text from conslote to string и java how write text to file
 
        // создадим новый файл
        File newFile = new File("F://Dir.txt");
        try
        {
            boolean created = newFile.createNewFile();
            if(created)
                System.out.println("File has been created");
        }
        catch(IOException ex){
 
            System.out.println(ex.getMessage());
        }
        //чтение с консоли через Scanner:
        String cls0;
        String cls1;
 
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a string");
        cls0 = in.nextLine();
 
        System.out.println("Enter a string");
        cls1 = in.nextLine();
    }
}
CreateNewFile.java

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
import java.io.File;
import java.io.IOException;
 
public class CreateNewFile {
 
    //В этом классе представлены способы создания файла в Java
    public static void main(String[] args) throws IOException {
        // получаем разделитель пути в текущей операционной системе
        String fileSeparator = System.getProperty("file.separator");
 
        //создаем абсолютный путь к файлу
        String absoluteFilePath = fileSeparator + "Users" + fileSeparator + "prologistic" + fileSeparator + "file.txt";
 
        File file = new File(absoluteFilePath);
        if (file.createNewFile()) {
            System.out.println(absoluteFilePath + " Файл создан");
        } else {
            System.out.println("Файл " + absoluteFilePath + " уже существует");
 
 
            //создаем файл с указанием относительного пути к файлу
            String relativePath = "tmp" + fileSeparator + "file.txt";
            file = new File(relativePath);
            if (file.createNewFile()) {
                System.out.println(relativePath + " файл создан в корневой директории проекта");
            } else System.out.println("Файл " + relativePath + " уже существует в директории проекта");
        }
 
    }
}
В итоге из этапов только происходит создание файла по адресу и никакие вводимые через консоль три строки там не пишутся.
Кто сможет сделать это как можно рациональнее и короче, заранее благодарю.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.11.2018, 15:38
Ответы с готовыми решениями:

Не получается вставить несколько строк из одной таблицы в другую
Добрый день. Нужно вставить в таблицу oc_product_to_category в столбцы category_id, main_category, product_id значения ...

Дан текстовый файл, состоящий из нескольких строк. Поменять в нем местами первую и последнюю строку.
Дан текстовый файл, состоящий из нескольких строк. Поменять в нем местами первую и последнюю строку. Добавлено через 26 секунд ...

Создать текстовый файл in.txt, куда записать несколько строк. Найти номер самой короткой строки
1.Создать текстовый файл in.txt, куда записать несколько строк. Найти номер самой короткой строки. Буду благодарен ..

61
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 17:53
Студворк — интернет-сервис помощи студентам
тек вторую на третью а на вторую че ставить "долбаный учитель задолбал со сваими уроками:?"
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
16.11.2018, 17:59  [ТС]
DimaxDe, ну не задолбал, а просто дает мало практики в отличие от программирования на С++ и C# на двух прошлых семестрах, где у нас стоял все-же преподаватель, а не практикант, и сюда мне лазить почти не приходилось даже, хоть я по этим языкам был середнячок, но все же очень хорошо написал на экзамене программы на бумаге благодаря тому, что преподаватель всех часто подправлял и подсказывал и давал контрольные на бумаге, из-за чего какая-никакая практика была. Просто тот, кто у нас стоит сейчас, совершенно не осведомлен, у кого опыта побольше, у кого поменьше(как у меня например)
Вторую строку поменять на другую, я думаю да, можно и на третью поменять вполне.
В третьей строке по условию задачи нужно поменять второе слово на не важно какое другое.
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 18:18
тогда делаем так
Java
1
2
3
4
5
String ok=new String("долбаный учитель задолбал со сваими уроками:?");
String clsBlank=new String(" ");
// патом запись в самом конце 
String clsBlank=new String(" ");
fw.write(cls0);fw.write(ok);fw.write(cls1.replace(cls1.substring(cls1.indexOf(clsBlank,1),cls.indexOf(clsBlank,cls.indexOf(clsBlank)+1),"******"));
накалякал..ну потэстить пойдет

Добавлено через 3 минуты
но там над регулярные экпрессы полюбому..попробуй посмотри сам

Добавлено через 7 минут
там 2 места в названии цлс 1 забыл
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
16.11.2018, 18:19  [ТС]
DimaxDe, вроде бы все должно быть хорошо, но вот второй clsBlank подчеркивается красным и пишет:
Variable 'clsBlank' is already defined in the scope - Переменная 'clsBlank' уже определена в области.

И кстати, за что отвечают cls без цифр, которым нужно задать цифру, что они обозначают, что в clsN происходит замена строки на другую или что-то другое или еще?
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 18:26
Java
1
2
3
4
5
6
7
8
String ok=new String("долбаный учитель задолбал со сваими уроками:?");
 
// патом запись в самом конце 
String clsBlank=new String(" ");
fw.write(cls0);fw.write(ok);fw.write(cls1.replace(cls1.substring
(cls1.indexOf(clsBlank,1),cls1.indexOf(clsBlank,cls1.indexOf(clsBlank)+1),//ето меняем
"******"));//на ето
fw.close();in.close();
подправил немного

Добавлено через 3 минуты
индекс оф(значение,откуда начинать искат) возвращает местоположение искомого слова буквы и т.д

кароче ищем слово между 1 и 2 пробелами и молимся чтобы ето было второе слово)))
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
16.11.2018, 18:28  [ТС]
DimaxDe, поставил единицы к cls и сделал орфографию как сверху(также обнаружил отсутствие третьей скобки)-так теперь вообще весь вот этот фрагмент:

(cls1.indexOf(clsBlank,1),cls1.indexOf(c lsBlank,cls1.indexOf(clsBlank)+1),
"******"))); сплошь подчеркивается красной волной.

Выдает:
Cannot resolve method 'substring(int, int, java.lang.String)'
Невозможно разрешить метод substring (int, int, java.lang.String) '
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 18:31
скобка гдето убежала)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.11.2018, 18:34
Лучший ответ Сообщение было отмечено Jim Reinor как решение

Решение

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
package ru.ismoke;
 
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class Cyber {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = "";
        String blankString = "долбаный учитель задолбал со сваими уроками";
        String blankWord = "заменилинаэтослово";
        List<String> lines = new ArrayList<>();
 
        System.out.println("Для выхода, введи 'q'");
 
        while (!"q".equals(s)) {
            System.out.print("Input line: ");
            s = scanner.nextLine();
            lines.add(s);
        }
        lines.remove("q");
        
        lines.set(1, blankString);
        String[] words = lines.get(2).split(" ");
        if (words.length > 1) words[1] = blankWord;
        lines.set(2, String.join(" ", words));
 
        try (FileWriter writer = new FileWriter(new File("D:/test.txt"))) {
            for (String line : lines) {
                writer.write(line + System.lineSeparator());
            }
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
2
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 18:37
Java
1
2
fw.write(cls1.replace(cls1.substring
     (cls1.indexOf(clsBlank,1),cls1.indexOf(clsBlank,cls1.indexOf(clsBlank)+1)),"******"));
так проверь
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
16.11.2018, 18:38  [ТС]
DimaxDe, так намного лучше, но исключение только выдает

Exception in thread "main" java.lang.StringIndexOutOfBoundsExceptio n: String index out of range: -1
at java.lang.String.substring(String.java:1 960)
at Main.main(Main.java:49)

Нужно что-то еще приписать, дабы такого не было

iSmokeJC, да, хороший вариант ответа, тоже вариант. Пока я попробую другим способом доработать.
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 18:53
Java
1
2
3
int idx=cls1.indexOf(clsBlank);
     fw.write(cls1.replace(cls1.substring
     (cls1.indexOf(clsBlank,1),cls1.indexOf(clsBlank,idx+1)),"******"));
попробуй..если нет то походу так непойдет..воспользуйся вариантом от iSmokeJC он проффесиональнее и работает..
извини если неуспели добить..мне уходить надо..
1
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
16.11.2018, 19:13  [ТС]
DimaxDe, жаль, но и тут не проехало, может еще бы и сам пофиксить попробую. Вариант от iSmokeJC просто комментируется не очень хорошо и могут подумать, что автор такого убер-кода это не я. Оффлайн уже на сегодня окончательный? Если да, то я не буду терять время и попробую подумать.

Добавлено через 15 минут
iSmokeJC, DimaxDe, спасибо за отсутствие равнодушия к моей проблеме, вы мне очень сильно помогли с заданием.
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 20:38
Java
1
fw.write(cls1.replace("^\w\s","******"));
так канешно проще всего ..ток незнаю правильно нет..не силен в регулярках
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
16.11.2018, 20:48  [ТС]
DimaxDe, попробовал заменить fw.write и этот участок "^\w\s" подчеркивается красной волной Illegal escape character in string literal-судя по всему, неподдерживаемые символы

А фикс предыдущего варианта вероятно заключается в том, что чего то не хватает, вероятно строка была слишком длинной для приема строки
Исключение в потоке «main» java.lang.StringIndexOutOfBoundsExceptio n: индекс строки за пределами диапазона: -1
в java.lang.String.substring (String.java:1960)
на Main.main (Main.java:50)
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 20:58
Java
1
fw.write(cls1.replace("\^\\w\\s","******"));
мож так..надо выбрать помощ зала или звонок другу кто в експрессах шарит
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
16.11.2018, 21:09  [ТС]
DimaxDe, то же самое получилось, но как мне кажется, лучше уж был предыдущий вариант и найти способ его пофиксить на исключение, если это осуществимо.
Если бы не исключение, то программа бы идеально завершила работу

Exception in thread "main" java.lang.StringIndexOutOfBoundsExceptio n: String index out of range: -1
at java.lang.String.substring(String.java:1 960)
at Main.main(Main.java:49)

Исключение в потоке «main» java.lang.StringIndexOutOfBoundsExceptio n: индекс строки за пределами диапазона: -1
в java.lang.String.substring (String.java:1960)
на Main.main (Main.java:50)


Java
1
2
fw.write(cls1.replace(cls1.substring
                    (cls1.indexOf(clsBlank,1),cls1.indexOf(clsBlank,idx+1)),"******"));
Добавлено через 4 минуты
DimaxDe, Благодарю за оказанную помощь, но у меня уже ночь и я возьму вариант от iSmokeJC, у меня не осталось времени, потому что еще нужно сделать дополнительно функцию превращения txt файла в двоичный и поменять в нем 2 байта.
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 21:12
fw.write(cls1.replace(cls1.substring
(cls1.indexOf(clsBlank),cls1.indexOf(cls Blank,(idx+1))),"******"));
незнаю
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
16.11.2018, 21:27  [ТС]
DimaxDe, благодарю, но я использовал другой вариант, мне бы самое основное-сейчас сделать функцию превращения txt в двоичный файл со сменой в нем 2 байтов. Желательно, чтобы была в консоле скажем при нажатии любой кнопки
0
541 / 352 / 194
Регистрация: 07.11.2018
Сообщений: 1,243
16.11.2018, 21:29
непонял..тебе JFrame нужен с бутонами на которых листенеры висят?
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
16.11.2018, 21:58  [ТС]
DimaxDe, нет, мне надо чтобы в консоли при определенной кнопке нажать и превратить txt в двоичный файл со сменой в нем 2 байтов и все

Добавлено через 19 минут
А можно и просто создать двоичный файл и поменять в нем 2 байта файла
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2018, 21:58
Помогаю со студенческими работами здесь

Как в txt в каждую строку перед первым словом в строке написать слово mod?
как в txt в каждую строку перед первым словом в строке написать слово mod? пустых строк нет

Считать с файла (input.txt) строку, заменить в строке латинские буквы на русские, записать файл (input.txt) эту строку
Считать с файла (input.txt) строку, заменить в строке латинские буквы на русские, записать файл (input.txt) эту строку.

Отсортировать N-ую строку файла fin.txt по возрастанию длин слов в строке и записать ее в fout.txt
не могу понять c++ , поможет кто разобраться? на паскале всё получается, а сейчас решил C++ изучить Вот задачка: В текстовом файле...

Как создать файл *txt в папке с программой
Помогите пожалуйсто ,как создать файл *txt?В той-же папке,в которой хранится программа.


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru