- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
public class Path {
private String path;
private char winSep = '\\';
private char unixSep = '/';
public void set(String path){
if(!path.endsWith(File.separator)){
path.concat(File.separator);
}
this.path = path;
if(File.separatorChar == winSep && path.charAt(0) == unixSep){
this.path = path.replace(unixSep, winSep).substring(1);
}
}
public String get(){
String path = new String(this.path);
return path;
}
public String getRoot(){
String root = null;
if(File.separatorChar == unixSep){
root = "/";
}
if(File.separatorChar == winSep){
root = this.path.substring(0, this.path.indexOf(winSep)+1);
}
return root;
}
}
в 6 йаве нету класса Path, пришлось самому делать костыль-велосипед. тут где-то ошибочка есть, пока не смотрел.
anonimb84a2f6fd141 22.11.2013 18:04 # +12
Квинтессенция жавки - каждый лепит падсибя велосипеды.
spivti 22.11.2013 18:25 # 0
Просто путь исполняемого файла идет в URL форме. И в винде нужно другое отображение пути.
commons не трогал, пока не трогал.
anonimb84a2f6fd141 22.11.2013 18:28 # +12
guest 22.11.2013 18:33 # −19
anonimb84a2f6fd141 22.11.2013 18:38 # +11
guest 22.11.2013 19:33 # −19
guest 22.11.2013 20:31 # −19
roman-kashitsyn 22.11.2013 18:26 # 0
Щито? File.pathSeparator
spivti 22.11.2013 18:34 # −1
a вот File.separator выдает '\'
roman-kashitsyn 22.11.2013 18:37 # 0
guest 22.11.2013 20:32 # −15
anonimb84a2f6fd141 22.11.2013 20:37 # +12
guest 22.11.2013 22:22 # −19
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
bormand 22.11.2013 19:08 # +1
Это не ОС-зависимый разделитель. Это виндософтозависимый разделитель. Ядро винды ведь вполне понимает '/', и если бы не досовское наследие в прогах и мозгах программистов, винда вполне могла бы работать на '/', и всем было бы счастье...
anonimb84a2f6fd141 22.11.2013 20:37 # +11
1024-- 22.11.2013 22:36 # +2
guest 22.11.2013 23:08 # −20
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
crastinus 23.11.2013 10:01 # +1
anonimb84a2f6fd141 23.11.2013 10:29 # −3
guest 23.11.2013 12:19 # −4
Но пацаны, как всегда, не обратили внимания на это анонимное кукареканье. Пусть кукарекает, что с него взять, ведь у него нет ни лица, ни даже имени?
Аноним — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора-двух лет каждая ночь была очень трудной, так как он был вынужден делить свой анус с фраером и питоном. Да, да, все так: в анусе у него жил питон, также он иногда прятал там своего фраера, в моменты, когда к нему заглядывал хозяин, чтобы не переплачивать за съемную квартиру. Чтобы не усложнять читателя подробностями, скажем лишь, что его анус был разработан настолько, что он без труда мог спрятать в нём банку пару банок сгущёнки, буханку хлеба и своего фраера - не считая своего ручного питона, разумеется...
anonimb84a2f6fd141 23.11.2013 12:41 # −5
guest 23.11.2013 13:14 # −3
Stertor 23.11.2013 13:21 # −2
Это малозаметная хуйня, ништяк.
Как насчет того, чтобы держать в жопе дельфина? То-то...
ps/s въебал всем по минусу.
bormand 23.11.2013 14:54 # +4
Не, больше всего не повезло тем, кому приходится держать в анусе кресты.
anonimb84a2f6fd141 23.11.2013 14:56 # −1
Stertor 23.11.2013 15:07 # 0
guest 23.11.2013 15:12 # −3
Stertor 23.11.2013 15:33 # 0
guest 23.11.2013 18:58 # +1
Stertor 23.11.2013 19:06 # 0
anonimb84a2f6fd141 23.11.2013 15:53 # +1
someone 26.11.2013 06:12 # 0
Зато есть его предшественник - java.io.File.
spivti 27.11.2013 18:17 # 0
А в org.apache.commons.io в классе FilenameUtils все уже имется.
Dougrinch 28.11.2013 18:44 # 0
spivti 29.11.2013 14:30 # 0
Склейку -расклейку путей я сделал в другом классе, если интересно выложу потом какнибудь.
=====================
сейчас это выглядит так
spivti 29.11.2013 14:40 # 0
=======================
bormand 29.11.2013 15:11 # +1
А если не кончается на сепаратор, то молча делаем вид, что setPath вообще не вызывали, да? :)
Что вообще происходит в этих функциях? :)
bormand 29.11.2013 15:25 # 0
1) inArgs пустое, а путь, полученный после конкатенации pathForChange к текущему пути существует - делаем сконкатенированный путь текущим. (аля cd на относительный путь).
2) inArgs пустое, а путь, полученный после конкатенации pathForChange не существует, зато существует сам pathForChange - делаем его текущим. (аля cd на абсолютный путь).
3) inArgs пустое, ни сконкатенированный ни сам pathForChange не существуют - бросается исключение ""Bad new path or path part".
4) inArgs не пустое, pathForChange не пустое - бросается исключение "need only key or path".
5) inArgs содержит некий args[0], pathForChange пустое - отбрасываем от path последний компонент (аля cd ..).
6) inArgs не пустое, и не содержит некого args[0], pathForChange пустое - прыгаем в корень диска (аля cd \ в винде или cd / в линухе).
Что за неудачная эмуляция cd? :))
if (new File(concated).exists()), имхо, говно: обычно относительный путь отличают от абсолютного тупо по наличию '/', '\' или имени диска в начале. А в твоем коде change на /lib из папки /usr прыгнет в /usr/lib вместо /lib :)
spivti 29.11.2013 15:49 # 0
какая есть).
if (new File(concated).exists()) дерьмецо еще то, конечно, но нужно проверить корректность существования пути. в org.apache.commons.io.FilenameUtils вроде такая возможность есть но как-то не так работает.
Либо делать как-то по другому.
bormand 29.11.2013 16:21 # 0
P.S. Что за таинственные inArgs и args[0]?
spivti 29.11.2013 16:34 # 0
например
args[0] определен в этом классе. Т.е. определение наличие такого (args[0] ) ключа в списке введенных пользователем ключей.
bormand 29.11.2013 16:41 # +1
Спасибо кэп, это видно и из кода. Но что все-таки лежит в args[0]? :)
P.S. Как ты ловко отвечаешь на вопросы, чтобы ничего лишнего не раскрыть...
spivti 29.11.2013 16:58 # +1
Вот так банально)
bormand 29.11.2013 18:50 # +2
spivti 29.11.2013 19:00 # 0
Только этот модуль содержит только ключи, в программе предусмотрен вариант как ключи с атрибутами.. Т.е. эти хранятся у меня в таком виде
где а , о - ключи, после : идут возможные атрибуты
bormand 29.11.2013 19:17 # +1
> возможные атрибуты
Т.е. прогу с String args[] = {"а:ahd", "o:skg"} можно вызвать как-то так?
spivti 29.11.2013 19:27 # 0
имя команды ключ:атрибут1 ключ:атрибут2 ключ:атрибутN /строка ;
имя команды ключ1 ключ2 ключN /строка ;
имя команды /строка ;
также немного усложненный вариант
имя команды1 ключ:атрибут1 ключ:атрибут2 ключ:атрибутN /строка &&
имя команды2 ключ:атрибут1 ключ:атрибут2 ключ:атрибутN /строка &&
имя командыN ключ:атрибут1 ключ:атрибут2 ключ:атрибутN /строка ;
Сделал практически все, но нада улучшить код и его читабельность.
Про символные константы забыл, хорошая вещь, спасиб)
anonimb84a2f6fd141 30.11.2013 00:25 # 0
bormand 30.11.2013 08:45 # +3
bormand 30.11.2013 13:55 # 0
roman-kashitsyn 30.11.2013 13:58 # +1
bormand 30.11.2013 14:05 # 0
Спасибо ;) Красиво они сделали описание аргументов в виде аннотаций.
anonimb84a2f6fd141 30.11.2013 15:27 # 0
А не, это ты соснул. По крайней мере внешние есть.
bormand 30.11.2013 15:53 # +3
Где эт я соснул? Я же ответил тебе "Ты так говоришь, как-будто в жабе есть изкоробочный парсер аргументов ;)", а ниже написал что есть куча внешних велосипедов. Так что соснул не я, а автор очередного велосипедного парсера аргументов, по совместительству ОП :)
anonimb84a2f6fd141 30.11.2013 16:03 # +1
bormand 30.11.2013 16:26 # 0
Так же как и кресты без буста.
anonimb84a2f6fd141 30.11.2013 19:38 # 0
bormand 30.11.2013 19:56 # −1
А сишка без нихуя ;(
roman-kashitsyn 30.11.2013 21:42 # 0
anonimb84a2f6fd141 30.11.2013 16:47 # 0
bormand 30.11.2013 16:56 # 0
Ну, наверное, commons cli. Хотя jcommander, который сегодня посоветовал Роман, мне больше понравился.
spivti 29.11.2013 15:44 # 0
моя реализация такая есть несколько классов всем известного аналога комманд.ком
эти команды корректо работают с добавленным сепаратором. добавлять его удобно в Одном месте. Что сделано в setPath.
spivti 29.11.2013 16:03 # 0
bormand 29.11.2013 16:23 # 0
Дык если сепаратор на конце path уже есть, то setPath нихуя ничего не делает... Или это такая фича, и else this.path = path там действительно не нужно? :)
spivti 29.11.2013 16:28 # 0
bormand 29.11.2013 16:45 # +1
Допустим в path лежал путь "/tmp/".
После path.setPath("/home/bormand") path.getPath() вернет нам "/home/bormand/", что соответствует твоим намерениям.
А вот после path.setPath("/home/spitivi/") path.getPath() по-прежнему будет нам возвращать "/tmp/", что явно косяк. Или это фича?
spivti 29.11.2013 17:08 # 0
Поэтому я и приклеиваю "/".
кусочек кода дир команды
spivti 29.11.2013 17:15 # 0
spivti 29.11.2013 16:41 # +1
====
else this.path = path там действительно не нужно? :)
очень даже нужно.