Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> URL.openStream() в .jar файле не верно работает 
:(
    Опции темы
Laky1911
Дата 22.12.2012, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Все доброго дня. Есть следующий код:
Код

package app;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class YaMapPage {
    private final static String URL_BEGIN = "http://maps.yandex.ua/?rtext=";
    private final static String URL_NO_JAMS = "&sll=30.522301%2C50.451118&sspn=0.704498%2C0.241562&rtm=atm&source=route&ll=30.522301%2C50.451118&spn=0.704498%2C0.241562&z=11&l=map";
    private final static String URL_JAMS = "&sll=30.522301%2C50.451118&sspn=0.704498%2C0.241562&rtm=dtr&source=route&ll=30.522301%2C50.451118&spn=0.704498%2C0.241562&z=11&l=map%2Ctrf&trfm=cur";
 //метод строит ссылку на яндекс карты и возвращает поток
    public InputStream getOpenStream(String start, String end, boolean jams) throws IOException {
        StringBuilder url_address = new StringBuilder(URL_BEGIN);
        url_address.append(start)
                .append("~")
                .append(end)
                .append(jams ? URL_JAMS : URL_NO_JAMS);
        URL url = new URL(url_address.toString());
        return url.openStream();
    }
//с этого метода начинается работа в классе, start и end содержать адреса (русские символы)
    public DataAboutRoute getData(String start, String end) throws IOException {
        DataAboutRoute data = new DataAboutRoute();
        BufferedReader reader = new BufferedReader(new InputStreamReader(getOpenStream(start, end, false), "UTF-8"));
        findValues(reader, data.getRoute1());
        reader = new BufferedReader(new InputStreamReader(getOpenStream(start, end, true), "UTF-8"));
        findValues(reader, data.getRoute2());
        return data;
    }

    public void findValues(BufferedReader reader, DataAboutRoute.RouteData data) throws IOException {
        String line;
        Pattern pattern = Pattern.compile("\"durationWithJams\":\\d+\\.?\\d+,\"distance\":\\d+\\.?\\d+");
        Pattern pattern_numbers = Pattern.compile("\\d+\\.?\\d+");
        Matcher matcher_line, matcher_number;
//идет поиск в потоке по регулярному выражению для получения данных
        while ((line = reader.readLine()) != null) {   
            matcher_line = pattern.matcher(line);
            if (matcher_line.find()) {
                matcher_number = pattern_numbers.matcher(matcher_line.group());
                if (matcher_number.find()) {
                    data.setDuration(Double.valueOf(matcher_number.group()));
                }
                if (matcher_number.find()) {
                    data.setDistance(Double.valueOf(matcher_number.group()));
                }
                break;
            }
        }
    }
}



Проблема вот в чем: если я запускаю из ide(intellij idea у меня), ввожу адрес, то все ОК: регулярка находит то, что нужно. Если я строю .jar файл, то при вводе вводе тех же адресов(с русскими символами) регулярное выражение не проходит. Если во время запуска со среды разработки во входящем потоке были русские символы, то во время запуска с .jar - там знаки вопросов. 
В чем может быть проблема и как ее решить?
Спасибо все за помощь
PM MAIL   Вверх
miroque
Дата 29.12.2012, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java EE developer



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 13.4.2007

Репутация: нет
Всего: нет



а джарник в консоле запускаешь?
PM WWW Jabber   Вверх
Laky1911
Дата 29.12.2012, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Цитата(miroque @ 29.12.2012,  08:45)
а джарник в консоле запускаешь?

Нет, не с консоли

Это сообщение отредактировал(а) Laky1911 - 29.12.2012, 13:48
PM MAIL   Вверх
miroque
Дата 10.1.2013, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java EE developer



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 13.4.2007

Репутация: нет
Всего: нет



Цитата(Laky1911 @ 22.12.2012,  21:35)
Если я строю .jar файл, то при вводе вводе тех же адресов(с русскими символами) регулярное выражение не проходит. Если во время запуска со среды разработки во входящем потоке были русские символы, то во время запуска с .jar - там знаки вопросов. 

Честно признатся плохо понял как происходит запуск.
Одно знаю, сам сталквиваюсь с нечто подобным. Это когда в коде пишу, и вывожу информацию в консоль в базу данных и в файл сразу. Основная проблема заключается в кодировках.
Например сам код (даже в тойже IDE любой, сам текст можно писать например CP-1251), кодировка консоли какой нибудь ANSI, база данных Latin-1, файл UTF-8. И вот вроде написал

Код

log.info("Привет Мир!");


то в исходном коде, написано по русски, а вот в, консоле квадратами, в базе данных вопросиками, в файле еще какой аброкадаброй.

По моему, нужно обратить внимание на кодировки.

В моем случае это решилось тем что я в IDE - проекту сказал, файлы делай в кодировке UTF-8. И в файл я уже писал в UTF-8, базу исправил с Латин-1 на UTF-8, ну а консоль я смирился. и смотрел логи в файле.

так что возможно intellij idea делает эти преобразования за тебя, а когда из .jar то извините.

Что то в этом роде...
PM WWW Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.