2015-03-16 3 views
1

Я новичок в java. Проблема, что я сейчас нахожусь в том, что я отправляю имя файла с клиента на сервер. Когда я печатаю это имя на сервере, он печатает отлично, но он не соответствует строке, которую я жестко закодировал. Например: я отправляю «Lecture.pdf» в качестве имени файла от клиента к серверу, а затем я сопоставляю полученное имя файла с жестко закодированной строкой «Lecture.pdf», оно не совпадает и в конечном итоге возвращает false. Я ожидаю, что равный метод вернет true (как и должно).string.equal метод не работает

Это фрагмент кода, который может показать проблему. «Сервер» является объектом сокет здесь, и я читаю имя файла, используя массив байтов:

InputStream is = null; 
byte response [] = new byte [50]; 

is = server.getInputStream(); 
is.read(response); 

String str_res = new String (response); 

System.out.println ("Got reS: " + str_res); 
System.out.println ("Result: "+(response.toString()).equals ("Lecture.pdf")); 

ответ

3

Вам нужно написать

new String(response, "UTF-8").equals ("Lecture.pdf") 

или

str_res.equals("Lecture.pdf") 

Ты приравнивая исходный, неконвертированный массив байтов к строке. Байт-массив никогда не будет равен строке, потому что это разные типы. Вы также должны проверить, что правильное количество байтов преобразуется - если вы отправляете 1 байт, сколько символов должно иметь ваша строка вывода? Проверьте public String(byte[] bytes, int offset, int length, Charset charset) конструктор, и отслеживать, сколько байтов вы на самом деле читать с помощью:

int bytesRead = is.read(response); 
+0

Это не сработало. Должно ли response.toString() быть достаточно, чтобы преобразовать массив байтов в строку? –

+0

Распечатайте строку и распечатайте длину строки, чтобы увидеть, что происходит. Вероятно, вы используете неправильное количество байтов. Я обновил ответ. Удачи! –

+0

Вы правы! В этом была проблема. Большое спасибо :) –

0

Вместо сравнения response.toString() с жестко заданным значением, сравнить str_res.

response.toString() - строковое представление массива байтов.

Изменение:

System.out.println ("Result: "+(response.toString()).equals ("Lecture.pdf")); 

To:

System.out.println ("Result: "+str_res.equals ("Lecture.pdf")); 
+0

Это не исправить. Btw Я хочу, чтобы имя файла и начать читать этот файл, и это не работает для меня, потому что имя файла после преобразования в строку не совпадает с фактическими именами файлов в моей системе (хотя Lecture.pdf существует в том же каталоге как мой код) –

+0

Вы сказали, что str_res напечатаны в порядке? Означает ли это, что выдает «Lecture.pdf»? Есть ли лишние пробелы? – javajavajava

Смежные вопросы