Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Java сбивается путь Relevant / 13 сообщений из 13, страница 1 из 1
03.04.2021, 11:16
    #40059267
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
День добрый..
Пишу интеграцию с государственным сервисом используя их либу.
Как только либа инициализируется я уже
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
Я уже не могу писать так
  FileInputStream readfile=new  FileInputStream(+"/template"+filename);
или
   protected JMenuItem jMenuItem6 = new JMenuItem("Экспорт",new ImageIcon("images/Export24.gif"));

Я должен делать так добавлять System.getProperty("user.dir")
  FileInputStream readfile=new  FileInputStream(System.getProperty("user.dir")+"/template"+filename);
protected JMenuItem jMenuItem6 = new JMenuItem("Экспорт",new ImageIcon( System.getProperty("user.dir")+"/images/Export24.gif"));


Код: html
1.
2.
3.
4.
И Это первый вынос мозга При правильном
 System.getProperty("user.dir") неверный относительный путь
Т.е мне не надо делать 
 System.setProperty("user.dir", System.getProperty("user.dir"))(Ну я делал не помогает)


Консультируюсь с ними что неудобно..говорят есть решение,- сделайте так
Код: java
1.
 SerLibraryUtils.SetCurrentDirectory(System.getProperty("user.dir"));



Мне уже интересно...декомпилирую этот класс
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class SerLibraryUtils
{
    public native boolean SetCurrentDirectory(final String p0);
    
    public native boolean SetUSBDevice(final int p0, final byte[] p1);
    
    static {
        try {
            EndUserResourceExtractor.LoadLibrary("LibaJavaUtils");//LibaJavaUtils.so
        }
        catch (Exception ex) {
    }
}



Код: html
1.
И это второй вынос мозга нативный вызов  нативной библиотеки меняет в java VM путь relevant


Кто-то встречался...как такое возможно?
...
Рейтинг: 0 / 0
03.04.2021, 14:08
    #40059313
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
в java VM путь relevant
Что этот термин обозначает? Можно ссылку на доку?

Если либа меняется текущую директорию операционной системы, то непонятно, откуда возник вопрос и недоумение. Менять текущую директорию конечно плохо, но вполне вероятно, что были объективные причины (например legacy код который завязан на текущей директории).
...
Рейтинг: 0 / 0
03.04.2021, 14:10
    #40059314
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
irbis_al

Код: java
1.
2.
3.
public class SerLibraryUtils
{
    public native boolean SetCurrentDirectory(final String p0);



Вроде бы даже название ф-ций подсказывает, что именно делается с помощью данной нативной либы )))

В общем, Ваше удивление лично мне не понятно.
...
Рейтинг: 0 / 0
03.04.2021, 14:18
    #40059319
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
Leonid Kudryavtsev,

Ну путь Relevant ...я чуть опечатался ,-Конечно relative ... Это относительный путь
(В принципе могли догадаться)

Вроде бы даже название ф-ций подсказывает, что именно делается с помощью данной нативной либы )))

Да...Из названия то понятно...а вот реализация непонятна...неужели из нативной либы можно дернуть java VM в контексте смены каталога При том что
System.getProperty("user.dir")
Возвращает текущий каталог?
А в действительности он не текущий...Текущим является /tmp/LibaVersion
Если я создам файл new File("test")...Он окажется именно там.
Есть какая-то спецификация на это действие? в JNA JNI и т.д
...
Рейтинг: 0 / 0
03.04.2021, 14:32
    #40059325
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
irbis_al,
Я вот тут сейчас писал ответ...и пришла мысль....наверное они просто в своей dll (so) на уровне API OS Меняют каталог процессу java
(И это объясняет ,что ява об этом ничего не знает ,возвращая верный user.dir...А операционка уже счиает по другому)
...
Рейтинг: 0 / 0
03.04.2021, 16:19
    #40059353
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
irbis_al, ерунду какую-то пишете.

Ссылку на доку не нашел, придумывать не хочу
Если Вам интересно, то попытайтесь найти доку, что значит user.dir и чему он должен равняться и киньте ссылку на доку сюда.

Мне кажется, что если бы там был текущей директорий и его и назвали бы соответственно ))). Например по аналогии с ф-цией WinApi GetCurrentDirectory

автор relative ... Это относительный путь
(В принципе могли догадаться)

Ну относительный и относительный. При чем тут Java и JVM ?
Относительный путь в файловой системе считается от текущей директории операционной системы.

AFAIK

авторFileInputStream

На стек оверфлов пишут (ссылку на нормальную доку не нашел)
СтекОверфловAs stated in stackoverflow.com/a/840229/3159183, keep in mind that the -Duser.dir flag affects File objects (if they're not given a full path) but not FileOutPutStream objects.
...
Рейтинг: 0 / 0
03.04.2021, 16:25
    #40059354
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#fully-qualified-vs-relative-paths

MSDNFully Qualified vs. Relative Paths

For Windows API functions that manipulate files, file names can often be relative to the current directory, while some APIs require a fully qualified path. A file name is relative to the current directory if it does not begin with one of the following:
.....


При чем тут Java VM, для меня загадка.
То, что в класс File добавили еще какой-то специфики поведения - то на совести Java архитекторов и помогающих им анал итиков

IMHO
...
Рейтинг: 0 / 0
03.04.2021, 16:51
    #40059358
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
Похоже на легкий documentation баг



JavaDoc класса FileInputStreampublic FileInputStream(String name)
throws FileNotFoundException
Creates a FileInputStream by opening a connection to an actual file, the file named by the path name name in the file system. A new FileDescriptor object is created to represent this file connection.
First, if there is a security manager, its checkRead method is called with the name argument as its argument.

If the named file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading then a FileNotFoundException is thrown.


the file named by the path name name in the file system

Вроде как вопросов не возникает. Имя файла в файловой системе. Если не абсолютное, то относительное ТЕКУЩЕЙ директории в ОПЕРАЦИОННОЙ системе. IMHO

JavaDoc класса FileA pathname, whether abstract or in string form, may be either absolute or relative. An absolute pathname is complete in that no other information is required in order to locate the file that it denotes. A relative pathname, in contrast, must be interpreted in terms of information taken from some other pathname. By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.
....

By default the classes in the java.io package always resolve relative pathnames against the current user directory .

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

This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked

А тут мне кажется легкое лукавство. Т.к. подозреваю, что user.dir инициализируется текущей директорией на момент старта JVM . Подозреваю, но ссылку на доку пока не нашел. Ну и слова "is typically" в технической документации тоже выглядеть прелестно )))

IMHO
...
Рейтинг: 0 / 0
03.04.2021, 17:05
    #40059359
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
Ну да, что-то в Java хотели намудрить, но до конца не довели.

https://docs.oracle.com/javase/7/docs/api/java/nio/file/FileSystems.html#getDefault()

В общем, много знаний - много печали.
Никогда о user.dir не заморачивался и жил себе счастливо. Знаний, что в ОС есть текущая директория - мне вполне хватало )))
...
Рейтинг: 0 / 0
04.04.2021, 10:28
    #40059503
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
Leonid Kudryavtsev,
Я помню еще в дельфях писал, и после того как соседние приложения меняли мой текущий каталог то забил вообще него опиратся. AFAIK
...
Рейтинг: 0 / 0
04.04.2021, 13:35
    #40059535
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
А с какой ошибкой автор воюет? Чтоб менять user.dir есть команда ОС "cd" и ее вставляют в пусковой скрипт.
...
Рейтинг: 0 / 0
04.04.2021, 13:44
    #40059542
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
mayton
А с какой ошибкой автор воюет? Чтоб менять user.dir есть команда ОС "cd" и ее вставляют в пусковой скрипт.

не воюю я с ошибкой...Хотел узнать как такого поведения JVM можно достигнуть..
Ну пока переписывался сам догадался...Написал
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1334935&msg=22303763
...
Рейтинг: 0 / 0
04.04.2021, 14:21
    #40059550
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java сбивается путь Relevant
irbis_al
mayton
А с какой ошибкой автор воюет? Чтоб менять user.dir есть команда ОС "cd" и ее вставляют в пусковой скрипт.

не воюю я с ошибкой...Хотел узнать как такого поведения JVM можно достигнуть..
Ну пока переписывался сам догадался...Написал
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1334935&msg=22303763

В операционке путь задается на процесс. Другой процесс - может иметь другой $(pwd)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java сбивается путь Relevant / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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