- 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, пришлось самому делать костыль-велосипед. тут где-то ошибочка есть, пока не смотрел.
Квинтессенция жавки - каждый лепит падсибя велосипеды.
Просто путь исполняемого файла идет в URL форме. И в винде нужно другое отображение пути.
commons не трогал, пока не трогал.
Щито? File.pathSeparator
a вот File.separator выдает '\'
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
Это не ОС-зависимый разделитель. Это виндософтозависимый разделитель. Ядро винды ведь вполне понимает '/', и если бы не досовское наследие в прогах и мозгах программистов, винда вполне могла бы работать на '/', и всем было бы счастье...
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
Но пацаны, как всегда, не обратили внимания на это анонимное кукареканье. Пусть кукарекает, что с него взять, ведь у него нет ни лица, ни даже имени?
Аноним — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора-двух лет каждая ночь была очень трудной, так как он был вынужден делить свой анус с фраером и питоном. Да, да, все так: в анусе у него жил питон, также он иногда прятал там своего фраера, в моменты, когда к нему заглядывал хозяин, чтобы не переплачивать за съемную квартиру. Чтобы не усложнять читателя подробностями, скажем лишь, что его анус был разработан настолько, что он без труда мог спрятать в нём банку пару банок сгущёнки, буханку хлеба и своего фраера - не считая своего ручного питона, разумеется...
Это малозаметная хуйня, ништяк.
Как насчет того, чтобы держать в жопе дельфина? То-то...
ps/s въебал всем по минусу.
Не, больше всего не повезло тем, кому приходится держать в анусе кресты.
Зато есть его предшественник - java.io.File.
А в org.apache.commons.io в классе FilenameUtils все уже имется.
Склейку -расклейку путей я сделал в другом классе, если интересно выложу потом какнибудь.
=====================
сейчас это выглядит так
=======================
А если не кончается на сепаратор, то молча делаем вид, что setPath вообще не вызывали, да? :)
Что вообще происходит в этих функциях? :)
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 :)
какая есть).
if (new File(concated).exists()) дерьмецо еще то, конечно, но нужно проверить корректность существования пути. в org.apache.commons.io.FilenameUtils вроде такая возможность есть но как-то не так работает.
Либо делать как-то по другому.
P.S. Что за таинственные inArgs и args[0]?
например
args[0] определен в этом классе. Т.е. определение наличие такого (args[0] ) ключа в списке введенных пользователем ключей.
Спасибо кэп, это видно и из кода. Но что все-таки лежит в args[0]? :)
P.S. Как ты ловко отвечаешь на вопросы, чтобы ничего лишнего не раскрыть...
Вот так банально)
Только этот модуль содержит только ключи, в программе предусмотрен вариант как ключи с атрибутами.. Т.е. эти хранятся у меня в таком виде
где а , о - ключи, после : идут возможные атрибуты
> возможные атрибуты
Т.е. прогу с String args[] = {"а:ahd", "o:skg"} можно вызвать как-то так?
имя команды ключ:атрибут1 ключ:атрибут2 ключ:атрибутN /строка ;
имя команды ключ1 ключ2 ключN /строка ;
имя команды /строка ;
также немного усложненный вариант
имя команды1 ключ:атрибут1 ключ:атрибут2 ключ:атрибутN /строка &&
имя команды2 ключ:атрибут1 ключ:атрибут2 ключ:атрибутN /строка &&
имя командыN ключ:атрибут1 ключ:атрибут2 ключ:атрибутN /строка ;
Сделал практически все, но нада улучшить код и его читабельность.
Про символные константы забыл, хорошая вещь, спасиб)
Спасибо ;) Красиво они сделали описание аргументов в виде аннотаций.
А не, это ты соснул. По крайней мере внешние есть.
Где эт я соснул? Я же ответил тебе "Ты так говоришь, как-будто в жабе есть изкоробочный парсер аргументов ;)", а ниже написал что есть куча внешних велосипедов. Так что соснул не я, а автор очередного велосипедного парсера аргументов, по совместительству ОП :)
Так же как и кресты без буста.
А сишка без нихуя ;(
Ну, наверное, commons cli. Хотя jcommander, который сегодня посоветовал Роман, мне больше понравился.
моя реализация такая есть несколько классов всем известного аналога комманд.ком
эти команды корректо работают с добавленным сепаратором. добавлять его удобно в Одном месте. Что сделано в setPath.
Дык если сепаратор на конце path уже есть, то setPath нихуя ничего не делает... Или это такая фича, и else this.path = path там действительно не нужно? :)
Допустим в path лежал путь "/tmp/".
После path.setPath("/home/bormand") path.getPath() вернет нам "/home/bormand/", что соответствует твоим намерениям.
А вот после path.setPath("/home/spitivi/") path.getPath() по-прежнему будет нам возвращать "/tmp/", что явно косяк. Или это фича?
Поэтому я и приклеиваю "/".
кусочек кода дир команды
====
else this.path = path там действительно не нужно? :)
очень даже нужно.