Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Как изменить свойство файла?  [new]
hoz
Member

Откуда:
Сообщений: 19
Нужно изменить свойство файла "Кем сохранён". Это вообще реально сделать? Не нашёл я даже класса, который позволяет это делать. Properties для этого подходит?
11 янв 17, 18:14    [20095091]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
Blazkowicz
Member

Откуда: http://rsdn.ru/forum/java
Сообщений: 22597
hoz,

Вам же ещё в прошлой теме сказали что свойства файлов MS Office и свойства файлов файловой системы это не одно и то же.
Эти знания вымыло за несколько дней?

Properties это вообще не о том. Это утилита для работа с конфигами. Java аналог для ini файлов.
11 янв 17, 18:20    [20095131]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
hoz
Member

Откуда:
Сообщений: 19
Blazkowicz
hoz,

Вам же ещё в прошлой теме сказали что свойства файлов MS Office и свойства файлов файловой системы это не одно и то же.
Эти знания вымыло за несколько дней?

Properties это вообще не о том. Это утилита для работа с конфигами. Java аналог для ini файлов.

Помню, но BasicFileAttributes не содержит такое свойство. И другие интерфейсы там такой возможности не предоставляют.
Как тогда быть?
11 янв 17, 18:30    [20095168]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
Blazkowicz
Member

Откуда: http://rsdn.ru/forum/java
Сообщений: 22597
hoz
Помню, но BasicFileAttributes не содержит такое свойство. И другие интерфейсы там такой возможности не предоставляют.
Как тогда быть?

Вы это специально, да? BasicFileAttributes предназначен для работы с файловой системой. Они знать ничего не знает про MS Office. В JSE нет API для работы с MS Office. Java ничего не знает про Офис. А Windows - "знает". Поэтому вы в свойствах файла видите информацию о содержимом документов. Как вам ещё объяснить что свойства, которые вы ищете, находятся внутри файлов.

А аттрибуты файлов - это мета информация файловой системы. Она не относится к содержимому файлов.

Для вашей проблемы существует opensource проект Apache POI, который вы упорно продолжаете игнорировать.
11 янв 17, 18:37    [20095188]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
hoz
Member

Откуда:
Сообщений: 19
Суть в том, что я и POIXMLProperties лопатил. Здесь тоже нет такого атрибута.
11 янв 17, 19:08    [20095284]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
Blazkowicz
Member

Откуда: http://rsdn.ru/forum/java
Сообщений: 22597
hoz
Суть в том, что я и POIXMLProperties лопатил. Здесь тоже нет такого атрибута.


Что вы не то вкладываете в глагол "лопатил":
https://poi.apache.org/apidocs/org/apache/poi/POIXMLProperties.CoreProperties.html#getLastModifiedByUser()

http://stackoverflow.com/questions/27225499/how-to-get-last-saved-by-office-file-attribute-in-java
11 янв 17, 19:16    [20095311]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
hoz
Member

Откуда:
Сообщений: 19
[quot Blazkowicz]
hoz
Что вы не то вкладываете в глагол "лопатил"

Это видимо перегруз. Я вчера долбался ночью. Написил класс, который получает и задаёт свойства. Так вот, 3 свойства я не смогу вызвать. Например,
    // Получение атрибута "Кем сохранён" из закладки "Подробно" xlsx-файла
    public static String getLastModifiedByUser(File file) throws IOException, OpenXML4JException, XmlException {
        OPCPackage pkg = OPCPackage.open(file);
        POIXMLProperties xmlProps = new POIXMLProperties(pkg);
        PackagePropertiesPart propertiesPart = xmlProps.getCoreProperties().getUnderlyingProperties();
        return propertiesPart.get;
    }

В последней строке интелленсенс идеи мне не подсказывает выбор метода getLastModifiedByUser. Даже если его туда вбить на сильно, всё-равно подсвечивает красным его и толку нет. Как тогда его вообще вызвать?
11 янв 17, 19:44    [20095386]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
Blazkowicz
Member

Откуда: http://rsdn.ru/forum/java
Сообщений: 22597
hoz,

Вы по ссылке смотрели?
Since: POI 3.15 beta 3
У вас какая версия?
11 янв 17, 19:46    [20095394]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
hoz
Member

Откуда:
Сообщений: 19
Blazkowicz,
Смотрел. У меня последняя. Нужно было параметр входящий задать стрингом. Я не обратил внимания сразу. "Перегруз", как я выше и писал.
А как в вызывающем методе можно передать пользователя? И для чего он? Нам же нужно получить атрибут "Кем сохранён", а не задать..
11 янв 17, 19:55    [20095426]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
hoz
Member

Откуда:
Сообщений: 19
Получилось вот так:
    // Получение атрибута "Кем сохранён" из закладки "Подробно" xlsx-файла
    public static String getLastModifiedByUser(String user) throws IOException, OpenXML4JException, XmlException {
        OPCPackage pkg = OPCPackage.open(user);
        POIXMLProperties xmlProps = new POIXMLProperties(pkg);
        PackagePropertiesPart propertiesPart = xmlProps.getCoreProperties().getUnderlyingProperties();
        return propertiesPart.getLastModifiedByProperty().getValue();
    }

При вызове его и мэйна, в логе ловятся исключения:
java.lang.IllegalStateException: Zip File is closed
	at org.apache.poi.openxml4j.util.ZipFileZipEntrySource.getEntries(ZipFileZipEntrySource.java:45)
	at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:184)
	at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:684)
	at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:227)
	at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:187)
	at xcell.POIXMLProps.getLastModifiedByUser(POIXMLProps.java:183)

В чём дело?
11 янв 17, 20:05    [20095456]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
Blazkowicz
Member

Откуда: http://rsdn.ru/forum/java
Сообщений: 22597
hoz,

Что у вас в переменной user? Почему переменная для имени файла называется user? Пробовали абсолютный путь передать?
Используйте лучше метод open(), с параметром типа File. Тогда сможете, например, проверить наличие файла.
11 янв 17, 20:45    [20095562]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство файла?  [new]
hoz
Member

Откуда:
Сообщений: 19
Blazkowicz,
Да тут редактировать посты нет возможности. Вот и не успел попоравить.
В общем-то, так завелось...
    // Получение атрибута "Кем сохранён" из закладки "Подробно" xlsx-файла
    public static String getLastModifiedByUser(File file) throws IOException, OpenXML4JException, XmlException {
        OPCPackage pkg = OPCPackage.open(file);
        POIXMLProperties xmlProps = new POIXMLProperties(pkg);
        PackagePropertiesPart propertiesPart = xmlProps.getCoreProperties().getUnderlyingProperties();
        return propertiesPart.getLastModifiedByProperty().getValue();
    }

Только свойство это называется по левому getLastModifiedByProperty(), а не getLastModifiedByUser() как в документации.
Поэтому я и не находил его в списке доступных методов.
Теперь остался другой вопрос. Как задать это значение т.е. setLastModifiedByUser()
Вот мой метод:
    // Задание значения атрибуту "Кем сохранён" в закладке "Подробно" xlsx-файла
    public static void setLastModifiedByUser(File file, File newFile, String contentType, String user) throws IOException, InvalidFormatException {
        OPCPackage pkg = OPCPackage.open(file);
        XSSFWorkbook wb = new XSSFWorkbook(pkg);
        POIXMLProperties xmlProps = wb.getProperties();
        POIXMLProperties.CoreProperties coreProps = xmlProps.getCoreProperties();
        //coreProps.setLastModifiedByUser(contentType);
        coreProps.setL;
        FileOutputStream fos = new FileOutputStream(newFile);
        writeData(fos, wb, pkg);
    }

Ничего похожего на setLastModifiedByUser в списке доступных свойств нет.
11 янв 17, 20:54    [20095621]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить