Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > инфа о файле


Автор: Rusico 18.5.2004, 10:54
Добрый день. У меня есть небольшая проблемка: необходимо вытащить инфу о файле, а именно его родительский каталог. обычно это делается так:

File f = new File(fname);
f.getParent();


Но дело в том, что эта инфа нужна о самом CLASS-файле. Как это сделать?
Заранее спасибочки. smile.gif

Автор: AntonSaburov 18.5.2004, 12:19
Цитата
о дело в том, что эта инфа нужна о самом CLASS-файле.

Что это значит ?
Ты имеешь в виду, что тебе нужна информация о классе, который лежит в файле .CLASS ?

Тогда посмотри в сторону класса Class. Там есть все необходимое.

Автор: Domestic Cat 18.5.2004, 15:34
Код

import java.io.File;
import java.io.IOException;

public class Test
{
   Test() throws IOException
   {
       String name = this.getClass().getName() + ".class";
       File f = new File(name);
       f = new File(f.getAbsolutePath());
       System.out.println(f.getParent());
   }

    public static void main(String [] args)
   {
       try
       {
               Test test = new Test();
        }
        catch (IOException ioe)
        {
              ioe.printStackTrace();
         }
   }
}

Автор: LSD 18.5.2004, 19:21
2 Domestic Cat
Этот прием не всегда срабатывает, например если class файл находится не в текущем каталоге он не сработает.
Есть еще другой вариант:
ClassLoader.getSystemClassLoader().getResource("java/lang/Object.class")
выдает: jar:file:/C:/Soft/Programming/JBuilderX/jdk1.4/jre/lib/rt.jar!/java/lang/Object.class
а MyClass.class.getClassLoader().getResource("MyClass.class")
выдает: file:/C:/Documents%20and%20Settings/root/JProjects/Temproject/classes/MyClass.class

Автор: Domestic Cat 18.5.2004, 19:55

Код

String name = this.getClass().toString() + ".class";
System.out.println(new File(this.getClass().getClassLoader().getResource(name).toString()).getParent());


Tem ne menee dlya package eto rabotat' ne budet, a absolutePath (canonicalPath) srabotaet.

Автор: LSD 18.5.2004, 21:25
Цитата(Domestic @ 18.5.2004, 19:55)
Tem ne menee dlya package eto rabotat' ne budet, a absolutePath (canonicalPath) srabotaet.

Что вы имеете ввиду?

Автор: Domestic Cat 18.5.2004, 22:00
Esli class pomeshen v pakage (package mypackage;) to privedenniy vami kod rabotat' ne buded i brosit NullPoinerException(hotya dlya default package on zarabotaet).

absolutePath srabotaet i dlya classa pomeshennogo v package.

Автор: LSD 18.5.2004, 22:12
Ну конечно надо приводить полное имя класса с package, кстати для Object я так и написал.

Автор: Domestic Cat 18.5.2004, 22:37
Togda nado uznavat polnii put' k classu; no getPagent dast parent dlya etogo classa a ne dlya package (skazhem, dlya Object vydalo by file:/.../lang).

Nu, chego Rusico nado ya ne v kurse, poetomu adv/burnout.gif

Автор: LSD 19.5.2004, 19:34
2 Domestic Cat
Я попробовал ваш код для классов прописанных в CLASSPATH (и в jar и не jar), он выдает неправильный результат, он просто выдает текущую директорию.

Автор: Domestic Cat 19.5.2004, 19:49
Da ya i soglasen, on budet rabotat' s tolko s tekushey directoriey - nehoroshii kod smile.gif.

Цитата
необходимо вытащить инфу о файле, а именно его родительский каталог


tut neponyatno gde class - v package ili net. Esli v package to kakoy catalog - classa ili package?

A s kodom Vy pravy.



Автор: Rusico 20.5.2004, 13:40
Здавствуйте, извините, что так долго отсутствовал, просто выход в НЕТ имею исключительно в рабочие дни. Отвечаю на доп. вопросы, если кому ещё интересно:

1. Мой класс находится в пакете;
2. Если поподробнее, суть вопроса такова:
Странно, но если мой пакет с классом находится не в C:\JBuilder7\jdk1.3.1\bin, то я не могу прописывать относительные пути к файлам.

Спасибо за столь оживлённое обсуждение, обязательно попробую все из вышеприведённых способов.

Автор: LSD 20.5.2004, 18:55
Что значит относительные пути, относитально code base или отностительно текущей директории?
Если относитально code base то пишешь так:
Код
Resources.class.getResource("/mypackage/applicationIcon.gif")
и вы получите URL относительно расположения текущего package если в начале не писать "/" то путь будет относительно текущего класса.
Для получения пути относительно тукущего каталога пишите:
Код
new File("./<путь>")
.

Автор: breeezy 1.6.2004, 13:14
Пишу сюда, потому что по теме.
Дяденьки гуру, просветите, пожалуйста!
Необходимо вытащить инфу о файле, а именно не только lastModified(), но и время создания и прочее - все, что возможно выжать.

Класс File явно чего-то недоговаривает. Что ж такое то...

Автор: Domestic Cat 1.6.2004, 15:58
Sm. zdes':

http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html

Opredelit' datu/vremya sozdaniya faila v Java (core classes) nelzya. Skoree vsego eto svyazano s ne s Java a s host OS.
U apacha naprimer takaya biblioteka est'

http://jakarta.apache.org/tomcat/tomcat-4.0-doc/catalina/docs/api/org/apache/naming/resources/FileDirContext.FileResourceAttributes.html

Автор: LSD 1.6.2004, 19:30
Полная информация о файле зависит от файловой системы, поэтому стандартными средствами ее не получить. Но есть возможность сделать хитрый ход:
Код
Runtime.getRuntime().exec(<command>).getOutputStream()

где <command> - системная команда получения информации о файлах, т.е. например для виндов это: DIR, ATTRIB и COMPACT.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)