powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / подскажите пожалуйста как будет правильно
19 сообщений из 19, страница 1 из 1
подскажите пожалуйста как будет правильно
    #33088292
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
простая программка частичного копирования файлов .

import java.io.*;
import java.lang.StringBuffer;
public class MyClass{
static StringBuffer sb=new StringBuffer(43);
public static void main(String[] args) throws IOException {
try{
File h=new File("c:\\lemka.txt");
if (h.exists()==false){h.createNewFile();}
RandomAccessFile p=new RandomAccessFile(h,"rw");
File f=new File("c:\\","lem.txt");
RandomAccessFile d=new RandomAccessFile(f,"r");
do{
sb.delete(0,sb.length());
sb.append(d.readLine());
p.writeBytes(sb.toString()+"\n");
System.out.println(sb.length());
}while (sb.toString()!="null");
p.close();
d.close();
}
catch(Exception e){
System.out.println(e);
}
}
}


Проблема в том что когда lem.txt кончается то в конец lemka.txt дописывается null .Мне просто интересно почему
while (sb.toString()!="null");
не работает.Если написать
while (sb.toString()=="null");
то программа завершает нормально как и должно на первой строчке
а наоборот не хочет
Как написать правильно и главное почему этот мой вариант не работает хотя вроде как должен
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33090058
Plut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй

Код: plaintext
 while  (sb.toString().equals( null ));
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33090088
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
  do {
sb.delete( 0 ,sb.length());
sb.append(d.readLine());
p.writeBytes(sb.toString()+"\n");
System.out.println(sb.length());
} while  (sb.toString()!="null");

Попробуй просто while без do, а то выходит что прога сначала пробегает цикл, записывает твою нулевую строку, а только потом до неё доходит что условие было !=null
Код: plaintext
1.
2.
3.
4.
5.
  while  (sb.toString()!="null"){
sb.delete( 0 ,sb.length());
sb.append(d.readLine());
p.writeBytes(sb.toString()+"\n");
System.out.println(sb.length());
}

Кстати при обработе ошибки лучше использовать не System.out.println(e);, а e.printStackTrace();
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33090105
. © .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
п...ц :) нет слофф :) ах..ь :)

никогда не сравнивайте строку так:

Код: plaintext
1.
2.
3.
String s = "asd";
 if  (s == "asd") {
  // нет гарантии, что этот участок кода выполнится
}

...

так и только так:

Код: plaintext
1.
2.
3.
4.
String s = "asd";
 if  ("asd".equals(s)) {
  
}

--
если снова отключат свет
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33092875
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Plut
так " while (sb.toString().equals(null)); " так я пробовал это меня и удивило что это не работает.


Naug
так я тоже попробовал проблема в том что я не могу определить конец файла вот это вот " != " не работает почиму то. Сначало то и было while do это потом я переделал в do while

для
. © .
я так и не сравниваю благо книжку Философия ява купил про экуал там написано хорошо и в статьях часто встречается а насчет того как делать попробуйте while (sb.toString().equals(null));
все равно не работает только дописывает в новую копию файла когда кончается файл из которого копируют строчу null


так вот мне просто интересно пачиму это не работает ежели кто из гигантов мысли панимает в чем реально проблема и как объянить пачиму код работает и какой код (копирующий файл будет работать типа приведенного примера c использованием RabdomAccessFile а не через FileReader и FileWriter)будет работать

в принципе я то его сделал через сравнение текущей позиции и длины файла мне просто интересно пачиму != не работает а == работает
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33092882
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только попробуйте сначала проверьте сами он работает или нет
а питоне это так просто а ява так сложно пачиму то
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33092903
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи отвечающие, вы хоть код читали, который "не работает"?


Проблема в том что когда lem.txt кончается то в конец lemka.txt дописывается null .Мне просто интересно почему
while (sb.toString()!="null");
не работает.Если написать
while (sb.toString()=="null");
то программа завершает нормально как и должно на первой строчке
а наоборот не хочет
Как написать правильно и главное почему этот мой вариант не работает хотя вроде как должен

^^^ оба варианта не работают.
Просто первый всегда true, а второй всегда false.


Условие выхода должно стоять не после, а перед записью прочитанной строки в файл.
Проверять надо было по !"null".equals(sb.toString());
Писать надо было хотя бы так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 import  java.io.*;
 import  java.lang.StringBuffer;

 public   class  MyClass {
     public   static   void  main(String[] args)  throws  IOException {
         try  {
            File h =  new  File("c:\\lemka.txt");
             if  (h.exists() == false) {h.createNewFile();}
            RandomAccessFile p =  new  RandomAccessFile(h, "rw");
            File f =  new  File("c:\\", "lem.txt");
            RandomAccessFile d = new RandomAccessFile(f, "r");
            for(String string; (string = d.readLine())!=null; ) {
                p.writeBytes(string);
                p.writeBytes("\n");
            } 
            p.close();
            d.close();
        }
         catch  (Exception e) {
            System.out.println(e);
        }
    }
}
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33092934
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33092953
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33092979
. © .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingя так и не сравниваю благо книжку Философия ява купил про экуал там написано хорошо и в статьях часто встречается а насчет того как делать попробуйте while (sb.toString().equals(null));
все равно не работает только дописывает в новую копию файла когда кончается файл из которого копируют строчу null

х.ё.о читал значит.

это:

Код: plaintext
1.
 while  (sb.toString().equals( null ));

самая тупая конструкция которую я сегодня видел. че ты хочешь
узнать, когда пишешь это? если определить "пуст" ли StringBuffer
a.k.a sb, то вполне достаточно:

Код: plaintext
1.
2.
3.
 if  (sb.length() ==  0 ) {
...
}

sb.toString() никогда не вернет null
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33093055
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
офф

ну и чо ты такой злой? ;)

партал ещё жифф?


Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33093417
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
огромное спасибо NotGonnaGetUs за строчку !"null".equals(sb.toString())
это я понял :)
а еще гигантское спасибо за for(String string; (string = d.readLine())!=null; )
не знал что в яве так можно прям как на питоне
for x in range list и все никаких заморочек

. © .
соррри я напарил :)
насчет о самой тупой конструкции while (sb.toString().equals(null));
согласен тупая надо считать так sb.toString().equals("null") только вот про "!" не подумал

Так вот при объявлении vm выделяет память для объекта и заполняет её нулями. При инициализации заполняет нужными значениями. Теперь ежели я использую конструкции == или != для объектов то сравниваются ссылки, а ежели equals то сравниваются значения областей памяти выделеной под сравниваемые объекты.
Поэтому то и while (sb.toString()!="null"); всегда true ссылки на объекты то разные

. © .
понял пачиму и sb.toString() никогда не вернет null :) спасибо и на этом тоже

Наконец понял алилуйаааа
во это ООП после паскаля сложно как

Пайду еще пачитаю главу 3 :D)
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33096914
Tomaso
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Voobse ne o4en haroshij sposob pereka4ki fajlov(lleming ).
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33098484
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tomaso

возможно действительно и не лучший но меня нтересовало только как определить конец файла и все :) .

а как будет выглядеть лучший вариант (плиз с исходниками ) и пачиму он лучше
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33098929
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingTomaso

а как будет выглядеть лучший вариант (плиз с исходниками ) и пачиму он лучше

Думаю потому, что он будет написан на транслите.
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33098980
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
импорт ява.ио.*;
импорт ява.ланг.СтрингБуффер;

публиц цласс МыЦласс {
    публиц статиц воид маин(Стринг[] аргс) тхрощс ИОЕхцептион {
        тры {
            Филе х = нещ Филе("ц:\\лемка.тхт");
            иф (х.ехистс() == фалсе) {х.цреатеНещФиле();}
            РандомАццессФиле п = нещ РандомАццессФиле(х, "рщ");
            Филе ф = нещ Филе("ц:\\", "лем.тхт");
            РандомАццессФиле д = нещ РандомАццессФиле(ф, "р");
            фор(Стринг стринг; (стринг = д.реадЛине())!=нулл; ) {
                п.щритеБытес(стринг);
                п.щритеБытес("\н");
            } 
            п.цлосе();
            д.цлосе();
        }
        цатч (Ехцептион е) {
            Сыстем.оут.принтлн(е);
        }
    }
}
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33099299
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Науг
Вот что значит делать не**й
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33099329
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen2Науг
Вот что значит делать не**й
Сначала написал, потом подумал. Ты ведь это не руками все делал? Да? :))
...
Рейтинг: 0 / 0
подскажите пожалуйста как будет правильно
    #33099357
Naug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://translit.ru/

Поэтому меня и раздражает когда люди без объективных причин пишут транслитом.

P.S. найти бы транслятор каторай изпользюит таваристч Грассав
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / подскажите пожалуйста как будет правильно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]