🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
11 messages
11 total messages Started by Borneq Sat, 14 Sep 2013 13:32
Chodzenie po katalogach i po archiwum
#153868
Author: Borneq
Date: Sat, 14 Sep 2013 13:32
20 lines
2034 bytes
Pobierać listę plików dla danego katalogu można używając
File[] filesAndDirs = dir.listFiles(); gdzie dir jest klasy File
lub
File[] filesAndDirs = fileSystemView.getFiles(currentDirectory, false); 
gdzie currentDirectory jest typu File
To drugie rozwiązanie jest lepsze, bo zmieniając
currentDirectory = fileSystemView.getParentDirectory(currentDirectory);
nie ma problemu gdy idziemy wyżej niz był nasz pierwszy katalog, a w 
pierwszym rozwiązaniu bywały problemy.
Tymczasem gdy chcę się poruszać w archiwum a metoda listująca daje mi listę 
ścieżek, tworzę swoją klasę np. nazywając ją TreeFile, wypełniam ją 
ścieżkami, sortuję itd.
A teraz pobieranie listy plików i katalogów
filesAndDirs = treeFile.getFiles(currentDirectory)
Jak to najlepiej rozwiązać? czy filesAndDirs ma być typu File[] ? ale 
wówczas currentDirectory oznaczający katalog w archiwum też ma być typu 
File.Ale wówczas chyba jest źle bo File oznaczają rzeczywiste pliki. Czy też 
wprowadzić elementy typu TreeFileItem implementujące Comparable? ale wówczas 
będą potrzebne zupełnie rózne metody do chodzenia po rzeczywistych 
katalogach a inne po archiwum. 
Re: Chodzenie po katalogach i po archiwum
#153869
Author: Arivald
Date: Sat, 14 Sep 2013 20:17
49 lines
3185 bytes
W dniu 2013-09-14 15:32, Borneq pisze:
> Pobierać listę plików dla danego katalogu można używając
> File[] filesAndDirs = dir.listFiles(); gdzie dir jest klasy File
> lub
> File[] filesAndDirs = fileSystemView.getFiles(currentDirectory, false);
> gdzie currentDirectory jest typu File
> To drugie rozwiązanie jest lepsze, bo zmieniając
> currentDirectory = fileSystemView.getParentDirectory(currentDirectory);
> nie ma problemu gdy idziemy wyżej niz był nasz pierwszy katalog, a w
> pierwszym rozwiązaniu bywały problemy.

Problemy? File.getParentFile() zawsze działa.


> Tymczasem gdy chcę się poruszać w archiwum a metoda listująca daje mi
> listę ścieżek, tworzę swoją klasę np. nazywając ją TreeFile, wypełniam
> ją ścieżkami, sortuję itd.
> A teraz pobieranie listy plików i katalogów
> filesAndDirs = treeFile.getFiles(currentDirectory)
> Jak to najlepiej rozwiązać? czy filesAndDirs ma być typu File[] ? ale
> wówczas currentDirectory oznaczający katalog w archiwum też ma być typu
> File.Ale wówczas chyba jest źle bo File oznaczają rzeczywiste pliki. Czy
> też wprowadzić elementy typu TreeFileItem implementujące Comparable? ale
> wówczas będą potrzebne zupełnie rózne metody do chodzenia po
> rzeczywistych katalogach a inne po archiwum.


Trochę nie tak.

Po pierwsze, nie próbuj tworzyć wspólnego interfejsu z File i czymś do 
archiwów. Raczej zrób owijki do obu, ze wspólnym interfejsem, i tego 
interfejsu używaj dalej w kodzie.

Tzn prawdopodobnie masz już gotową bibliotekę do archiwów, z obiektowym 
dostępem do plików wewnątrz. Nie ma sensu pisać tego samemu.

Więc stwórz interfejs (np MyFile), ze wszystkimi metodami które musisz 
mieć w aplikacji. I tylko takimi które muszą być, nie sil się na pisanie 
metod których i tak nie użyjesz. Zawsze możesz potem dodać nowe metody.

W następnym kroku piszesz dwie owijki, implementujące MyFile. Jedna 
będzie przekazywać i tłumacvzyć wywołania interfejsu MyFile do 
java.io.File, a druga do obektu pracujęcego archiwum.

I teraz dodanie obsługi nowego typu archiwum sprowadza się do dodanie 
nowej klasy owijki inplementującej MyFile.

-- 
Arivald
Re: Chodzenie po katalogach i po archiwum
#153870
Author: Borneq
Date: Sun, 15 Sep 2013 06:02
11 lines
1632 bytes
Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości 
news:l12gel$9lv$1@news.dialog.net.pl...
> I teraz dodanie obsługi nowego typu archiwum sprowadza się do dodanie 
> nowej klasy owijki inplementującej MyFile.

Na SourceForge jest projekt 7-Zip-JBinding który daje interfejs Javy dla 
masy formatów obsługiwanych przez 7-zip. Nie obsługuje .ace, więc teraz 
zrobiłem owijkę biblioteki UnAceV2.dll. Dziala w ten sposób, że wołam metodę 
natywną do listowania i jako parametr zaimplementowany interfejs, informacje 
zbierane są w tej implementacji interfejsu.Chcę teraz zrobić demo do UnACE 
które zamiast dawać listę ścieżek printfem, wejdzie do katalogu.. 
Re: Chodzenie po katalogach i po archiwum
#153871
Author: Borneq
Date: Sun, 15 Sep 2013 06:20
19 lines
1925 bytes
Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości 
news:l12gel$9lv$1@news.dialog.net.pl...
> Problemy? File.getParentFile() zawsze działa.

Ja używałem tworzenie nowego obiektu z parametrem "..", choć warto użyć 
FileSystemView bo daje ikonki plików.

> Więc stwórz interfejs (np MyFile), ze wszystkimi metodami które musisz 
> mieć w aplikacji. I tylko takimi które muszą być, nie sil się na pisanie 
> metod których i tak nie użyjesz. Zawsze możesz potem dodać nowe metody.

Potrzebne metody to : zmiana katalogu,m wejście głębiej i wyżej "..", oraz 
metoda dająca listę plików i katalogów dla danej pozycji. Mogę mieć więc 
interfejs i dwie implementacje, jednak co z elementami zwracanymi przez 
metodę listowania bieżącej pozycji? Raz to będą File[] raz moje itemy. Czy 
jako parametr pozycji oraz zwracane wartości też podawać interfejsy?
np. interfejs ITree oraz jego implementacje :RealTree i ArchiveTree

Pozdrawiam 
Re: Chodzenie po katalogach i po archiwum
#153872
Author: Borneq
Date: Sun, 15 Sep 2013 06:24
4 lines
1180 bytes
Użytkownik "Borneq" <borneq@antyspam.hidden.pl> napisał w wiadomości 
news:l13jje$j6j$1@node2.news.atman.pl...
> np. interfejs ITree oraz jego implementacje :RealTree i ArchiveTree
RealTree oraz AceTree i SevenZipTree 
Re: Chodzenie po katalogach i po archiwum
#153873
Author: Arivald
Date: Sun, 15 Sep 2013 08:17
53 lines
3091 bytes
W dniu 2013-09-15 08:20, Borneq pisze:
> Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości
> news:l12gel$9lv$1@news.dialog.net.pl...
>> Problemy? File.getParentFile() zawsze działa.
>
> Ja używałem tworzenie nowego obiektu z parametrem "..", choć warto użyć
> FileSystemView bo daje ikonki plików.
>

Zainteresuj się Apache Commons IO, moduł FilenameUtils posiada metody do 
normalizacji ścieżek do plików. Zamieni Ci żcieżki z ".." na rzeczywiste.


>> Więc stwórz interfejs (np MyFile), ze wszystkimi metodami które musisz
>> mieć w aplikacji. I tylko takimi które muszą być, nie sil się na
>> pisanie metod których i tak nie użyjesz. Zawsze możesz potem dodać
>> nowe metody.
>
> Potrzebne metody to : zmiana katalogu,m wejście głębiej i wyżej "..",
> oraz metoda dająca listę plików i katalogów dla danej pozycji. Mogę mieć
> więc interfejs i dwie implementacje, jednak co z elementami zwracanymi
> przez metodę listowania bieżącej pozycji? Raz to będą File[] raz moje
> itemy. Czy jako parametr pozycji oraz zwracane wartości też podawać
> interfejsy?
> np. interfejs ITree oraz jego implementacje :RealTree i ArchiveTree

Nie File[], zawsze zwracasz ITree[]. A czy to ITree będzie RealTree czy 
ArchiveTree to nie ma znaczenia, to zależy od implementacji.


interface ITree {
     public ITree getPatent();
     public ITree[] listFiles();

     public ITree cd(String folderName);
     ....
}



Jak zaprogramujesz to dobrze, to np. ArchiveTree będące w głównym 
katalogu będzie zwracać obiekt RealTree w wywołaniu getParent(), a 
RealTree po wejściu do archiwum będzie zwracać obiekty ArchiveTree.


BTW w Javie nie ma konwencji że interfejs zaczyna się od "I". Chodzi o 
to, że w przeciwieństwie do Delphi, w Javie interfejs praktycznie niczym 
nie różnie się od klasy, tyle że nie zawiera implementacji metod.
Dodatkowo są klasy abstrakcyjne, czyli takie które mogą zawierać 
jednocześnie metody zaimplementowane i puste.

-- 
Arivald
Re: Chodzenie po katalogach i po archiwum
#153874
Author: Borneq
Date: Sun, 15 Sep 2013 09:09
25 lines
1810 bytes
Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości 
news:l13qjn$rjn$1@news.dialog.net.pl...
> Nie File[], zawsze zwracasz ITree[]. A czy to ITree będzie RealTree czy 
> ArchiveTree to nie ma znaczenia, to zależy od implementacji.

Zrozumiałem, główną klasą będzie opis danego pliku a nie całe archiwum
++++++++++++++++
package com.borneq.io;

import javax.swing.Icon;

public interface Item {
 Icon getIcon();
 String getName();
 boolean isDirectory();
 long length();
 String lastModified();
 String getCanonicalPath();
}
natomiast do Archve może odwoływać się przez ownera

> Zainteresuj się Apache Commons IO, moduł FilenameUtils posiada metody do 
> normalizacji ścieżek do plików. Zamieni Ci żcieżki z ".." na rzeczywiste.

 Jest w standardzie Javy?
Re: Chodzenie po katalogach i po archiwum
#153875
Author: Borneq
Date: Sun, 15 Sep 2013 11:49
8 lines
1364 bytes
Użytkownik "Borneq" <borneq@antyspam.hidden.pl> napisał w wiadomości 
news:l13tgv$skg$1@node2.news.atman.pl...
>> Zainteresuj się Apache Commons IO, moduł FilenameUtils posiada metody do 
>> normalizacji ścieżek do plików. Zamieni Ci żcieżki z ".." na rzeczywiste.
>
> Jest w standardzie Javy?

To takie Boost C++ dla Javy 
Re: Chodzenie po katalogach i po archiwum
#153878
Author: Roman W
Date: Sun, 15 Sep 2013 13:24
12 lines
1876 bytes
On Sun, 15 Sep 2013 10:17:08 +0200, Arivald 
<NOSPAMarivald@interia.pl> wrote:
> BTW w Javie nie ma konwencji że interfejs zaczyna się od "I". 
Chodzi o 
> to, że w przeciwieństwie do Delphi, w Javie interfejs praktycznie 
niczym 
> nie różnie się od klasy, tyle że nie zawiera implementacji metod.

No i tym, ze nie możesz dziedziczyc po więcej niż jednej klasie, ale 
możesz po dowolnie wielu interfejsach.

RW
Re: Chodzenie po katalogach i po archiwum
#153876
Author: TrzyLinie
Date: Mon, 16 Sep 2013 07:33
10 lines
1697 bytes
W dniu 2013-09-15 11:09, Borneq napisał(a):
> Użytkownik "Arivald" <NOSPAMarivald@interia.pl> napisał w wiadomości news:l13qjn$rjn$1@news.dialog.net.pl...
>> Zainteresuj się Apache Commons IO, moduł FilenameUtils posiada metody do normalizacji ścieżek do plików. Zamieni Ci żcieżki z ".." na rzeczywiste.
>
> Jest w standardzie Javy?

Od wersji 1.7 jest java.nio.file.Files i pokrewne klasy.

-- 
TrzyLinie
Re: Chodzenie po katalogach i po archiwum
#153877
Author: Borneq
Date: Tue, 17 Sep 2013 07:18
7 lines
1325 bytes
Użytkownik "TrzyLinie" <trzyUSUNlinie@o2DEL.pl> napisał w wiadomości 
news:l16c92$img$1@dont-email.me...
>> Jest w standardzie Javy?
>
> Od wersji 1.7 jest java.nio.file.Files i pokrewne klasy.

Na razie uzylem Apache, ale zainteresuję się java.nio.file.Files 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads