Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: existpierre 28 Června 2009, 15:13:02

Název: Java - preco nejde read/write File ??
Přispěvatel: existpierre 28 Června 2009, 15:13:02
Dobry den,

chcel by som sa spytat, mam napisany objekt, ktory zapisuje do mojho config suboru a pri starte si z neho vytiahne ziadane nastavenia. problem je ten, ze vo windowse to slape ako ma, ale v linuxe mi proste ten subor, ktory je v korenovej zlozke, nezapise/nenacita. Vedel by mi niekto poradit, co je tam zle, alebo ako na to?

tu je ta trieda:

Kód: [Vybrat]
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ishs;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;

/**
 *
 * @author peter
 */
public class AppOptions {

    public final String ROWS_PAGES_CUST = "rowsPerPageCustomers";
    public final String ROWS_PAGES_ARTI = "rowsPerPageArticles";
    public final String ROWS_PAGES_ARTI_MC = "rowsPerPageMatchArticles";
    public final String ROWS_PAGES_STOR = "rowsPerPageStore";
    public final String ROWS_PAGES_WORK = "rowsPerPageWork";

    public Vector<String> data_set = new Vector();

    public AppOptions() {
        //nacita do vectora neparsnute riadky
        try {
            BufferedReader in = new BufferedReader(new FileReader("ishs.cfg"));
            String str;
            while ((str = in.readLine()) != null) {
                try {
                    data_set.add(str);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            in.close();
        } catch (IOException e) {
        }
    }

    //podla nazvu nastavenia ulozi hodnotu do vectora
    public void saveOption(String optionName, String value) {
        for (int x = 0; x < data_set.size(); x++) {
            String str = extractOptionName(data_set.get(x));
            if (optionName.equals(str)) {
                data_set.setElementAt(optionName + " = " + value, x);
            }
        }
    }

    //podla nazvu nastavenia ziska danu hodnotu z nacitaneho suboru
    public String getOption(String optionName) {
        String ret_val = "";
        for (int x = 0; x < data_set.size(); x++) {
            String str = extractOptionName(data_set.get(x));
            if (optionName.equals(str)) {
                ret_val = extractOptionValue(data_set.get(x));
            }
        }
        return ret_val;
    }

    // zapise vector s novymi nastaveniami na disk
    public void writeFile() {
        try {
            FileWriter out_file = new FileWriter("ishs.cfg");
            PrintWriter out = new PrintWriter(out_file);

            for (int x = 0; x < data_set.size(); x++) {
                try {
                    out.println(data_set.get(x));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    // z riadku parsne nazov nastavenia
    private String extractOptionName(String str) {
        return str.substring(0, str.lastIndexOf(" ") - 2);
    }
   
    // z riadku parsne hodnotu nastavenia
    private String extractOptionValue(String str) {
        return str.substring(str.lastIndexOf(" ") + 1, str.length());
    }
}

len pre info, obsah ishs.cfg suboru je:

Citace
rowsPerPageCustomers = 20
rowsPerPageArticles = 100
rowsPerPageMatchArticles = 30
rowsPerPageStore = 50
rowsPerPageWork = 2

za odpovede vopred dakujem
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: jfoot 28 Června 2009, 15:38:21
Zdravím Vás,

problém je pravděpodobně v tom, jak specifikujete cestu k souboru ishs.cfg.Dejte tam plně kvalifikovanou path odvozenou ze sytému a bude to šlapat. Také bych doporučil dát do konstruktoru třídy do vnější klauzule catch stejnou sekvenci (tedy e.printStackTrace();), kterou máte ve vnitřní klauzuli catch, kterou jste z nějakých příčin opominul. Hned bude jasné, proč "to nečte/nezapisuje".   
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: existpierre 28 Června 2009, 15:46:05
ja to potrebujem tak aby tam nebola zadana cesta, ale proste aby si to naslo vo svojom priecinku, ako na to ? proste ak nezadam celu cestu, malo by to brat akoze je v korenovom adresari aplikacie.
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: jfoot 28 Června 2009, 16:25:05
OK, to by mělo fungovat tak, jak popisujete... Jenom abychom se shodli -
předpokládám, že jste zkontroloval přístupová práva do onoho adresáře....
   Je adresář vypsaný příkazem
System.out.println(System.getProperties().getProperty("user.dir"));
vloženým před sekvenci instancující BufferedReader
totožný s adresářem, kde leží onen "ishs.config" ?
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: existpierre 28 Června 2009, 16:44:40
ked som si precital "user.dir" hned mi to trklo. Vsak linux ma svoje nastavenia v home zlozke ako skryte, tak preto :D ... moc diky za radu
K+ :)
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: petergula 28 Června 2009, 23:47:19

Dufam, ze moje poznamky budu len ako navod na zlepsenie a nebude ich brat nik ako buzeraciu.
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: jfoot 29 Června 2009, 09:25:43
Zdravím Petergula,

chlape Vás bychom potřebovali, podle toho, jak jste pečlivě prošel ten zdroják by s Vámi byla v oblasti programování pravděpodobně dobrá spolupráce (berte to jako poklonu, rozhodně nemíním na stránkách tohoto fóra provádět jakýkoliv nábor .. :D).
Váš příspěvěk je z hlediska začátečníka podnětný.
   Nicméně nemyslíte, že eXistPierre je už natolik zkušený, aby  sám dokázal dohlédnout důsledků operací , na které poukazujete (oprávněně), jako použití Properties, catch blocks.., string operací ? Já Vás nechci peskovat, napsal jste to dobře, nic proti, zaujala mě však věta :

Ad pouzitie Vector: je dost stary objekt(JDK1.0), uz sa vacsinou nepouziva, ale proti gustu

My používáme třídu Vector docela mohutně v aplikacích, které rozhodně nelze považovat za standalone. Dal byste mi sem, prosím, rovnocennou alternativu k použití třídy Vector  ? Dík

Název: Re: Java - preco nejde read/write File ??
Přispěvatel: existpierre 29 Června 2009, 10:32:09
Moc dakujem za kritiku :D ja som v jave len zaciatocnik, takze taketo upozornenia sa mi zidu :)  co sa tyka properties, tak som o tom nevedel a pozriem sa. Vector som zacal pouzivat, pretoze som nevedel o arrayliste no a navyse JTable alebo JXTable dokazu pracovat len so String[][] alebo Vector datami. Co sa tyka printstacktrace, to som si uz nedavno uvedomil a dopisujem to uz vsade. Natvrdo to ale medzeru uz nehlada, bo som dal lastIndexOf "= " ... Pre moj ucel to staci, kedze nikto sa v tom subore sparat nebude a zapisuje si ho sama aplikacia. co sa tyka ukoncenia app po vynimke.. Mam tam dialog, ktory zapise log do suboru v priecinku errorlogs. Vacsinu vynimiek mam odchytenu a pri volani dialogu mam ako argument "exit bit", ktorym pri volani dialogu poviem, ci sa ma ukoncit.. to znamena ze ak doslo k nejakej chybe v databaze, aplikacia sa ukonci, ale ak napriklad pouzivatel zadal namiesto cisla znak, tak v niektorych pripadoch hodi dialog, ale aplikacia sa neukonci. V ostatnych pripadoch mame prepracovany chybovy protokol.

ps: ale dufam ze sa aspon drzim konvencie pisania :D

Název: Re: Java - preco nejde read/write File ??
Přispěvatel: wam]Spider007 29 Června 2009, 14:22:24
pri catch nie je vzdy ziaduce ukoncit aplikaciu. Mame formular, ktory zapisuje data do DB a SQL ako take nedokaze kontrolovat ci do pola typu INT nedavam nahodou string. Ked sa o to proste clovek snazi, tak mysql zakrici...java to zachyti a upozorni pouzivatela. Ostatne kontroly dat vsak uz prebiehaju v ramci SQL procedur, toto je jedina vec, ktora sa musi robit na urovni javy.
V inych pripadoch sa samozrejme pri pade aplikacia ukoncuje...ako uz existpierre spomenul.

Inak alternativa ku vectoru by zaujimala aj mna. Bez vectora bolo vzdy nutne dopredu zistovat pre pole pocet riadkov v DB inak nastavalo pretecenie.

btw...nastavenia teoreticky mozeme presunut zo suboru do nejakej tabulky v DB.
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: petergula 29 Června 2009, 14:39:07
Citace
My používáme třídu Vector docela mohutně v aplikacích, které rozhodně nelze považovat za standalone. Dal byste mi sem, prosím, rovnocennou alternativu k použití třídy Vector  ? Dík
Ja/My sme ju pouzivali tiez, ajked postupne sa vytracala az teraz uz som ju riadne dlho nevidel.
 
Ako nahradu by som pouzival ArrayList. Zalezi od ciela, aky chceme dosiahnut. Vector je sice synchronizovany, ale to zasa stoji isty cas, takze je zasa o to pomalsi. Novsia implementacia Vector triedy(Java2) implementuje List, aby boli riesenia vseobecnejsie a flexibilnejsie, teda aspon podla mojho usudku.
Citace
As of the Java 2 platform v1.2, this class was retrofitted to implement the List interface, making it a member of the  Java Collections Framework.

Název: Re: Java - preco nejde read/write File ??
Přispěvatel: jfoot 29 Června 2009, 15:32:50
Zdravím petergula , eXistPierre a wam]Spider007,
a děkuji za poučné  příspěvky a konstruktivní přístup..
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: existpierre 09 Července 2009, 12:43:18
Len teraz sa naskytla otazka, ako ziskat korenovy adresar aplikacie?

Celkovo :

 String path = (new File (".")).getCanonicalPath();

funguje, ale len v ramci netbeans a vo windowse. V linuxe to chce stale nacitavat z home zlozky
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: jfoot 09 Července 2009, 14:36:35
Zdravím Vás,

jestli jsem Vám porozuměl. tak chcete na Linuxu v Javě vytvořit file a potom si nechat vrátit lokaci tohoto file.
Pak by to mohlo jít třeba takto : 
File f = File.createTempFile("myTxtFile", ".txt");
String absFilePath = f.getAbsolutePath();

Mně se osvědčil opačný , defenzívní přístup : stanovit cílovou lokaci souboru (např přes enviroment. proměnnou) a vytvořit soubor podle předepsané lokace ...
Samozřejmě, je to Vaše volba.... :)
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: existpierre 09 Července 2009, 22:47:35
ja potrebujem ziskat cestu k aplikacii ktoru mam pustenu. cize ak mam aplikaciu ~/Plocha/program/program.jar , chcem aby mi nejaka metoda vratila ~/Plocha/program/ ... tym bude aplikacia potovatelna kde kolvek a nemusia byt nastavenia v home
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: nettezzaumana 09 Července 2009, 22:53:33
co kdyby jsi zkusil irc, treba na irc.freenode.net a nebo nejake javovske forum?
tim nemyslim ze by me tve dotazy jakkoliv iritovaly, ale nepovazuji tento dotaz na tomto foru za neco, co alespon vzdalene pripomina "efektivni reseni problemu", nerkuli "hackers' attitude" ..

zdravim
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: jfoot 09 Července 2009, 23:12:09
ZdravímVás,

ja potrebujem ziskat cestu k aplikacii ktoru mam pustenu. cize ak mam aplikaciu ~/Plocha/program/program.jar , chcem aby mi nejaka metoda vratila ~/Plocha/program/ ... tym bude aplikacia potovatelna kde kolvek a nemusia byt nastavenia v home

OK, v tom případě zde je pravděpodobně to, co hledáte :
http://www.rgagnon.com/javadetails/java-0581.html

Když tak přemýšlím nad Vaším řešením :  jak bude prováděn deployment aplikace, její maitenance atp.
jejíž root dir není dopředu známý ?
   Asi tomu nerozumím, ale přece nemůžete říci lidem, kteří na Vás navazují  a mají co do činění s Vaší
 aplikací (administrátoři, programátoři, instalatéři = ne ti vodovodní  ;D, testeři a další )
a ptají se kde tu aplikaci najdou na disku : "Hele, spusť si tu aplikaci, ona ti dodá path" ?
Vytvářet root dir  "on fly" není z mého pohledu moc robustní...
Nejsem si jistý jestli si tímto řešením nezaděláváte na nějaké weekendy strávené v práci předělávkou tohoto řešení... ;)
Rozhodně Vám ale nic nevytýkám,. Jak říká jistý Boleslav Polívka v jednom filmu :
"Vaše volba, pane Mageri..., Vaše volba..." ;D
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: existpierre 10 Července 2009, 00:41:56
praveze sa to tym snazim zjednodusit, chcem aby si to cestu ziskalo zo systemu. Chcem aby to bolo plne multiplatformove, no problem je ten ze nastavenia ktore mam, musia byt v home zlozke. Tym, ze si aplikacia sama zisti, kde sa nachadza, potom nebude mat problem pracovat s akymi kolvek cestami, pretoze ich ziska zo systemu. Preto tam nechcem davat fixne, chcem aby to bolo "portable".

Kód: [Vybrat]
   
URL u = getClass().getProtectionDomain().getCodeSource().getLocation();
File f = new File(u.toURI());
System.out.println(f.getParent());

parada, dakujem, toto je to, co som potreboval.

co kdyby jsi zkusil irc, treba na irc.freenode.net a nebo nejake javovske forum?
tim nemyslim ze by me tve dotazy jakkoliv iritovaly, ale nepovazuji tento dotaz na tomto foru za neco, co alespon vzdalene pripomina "efektivni reseni problemu", nerkuli "hackers' attitude" ..

zdravim

vzdy, ked tam idem, hocico, ci irc, jabber konferencia, tak tam bud nikto nie je, alebo neodpisu.
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: petergula 10 Července 2009, 06:04:58
Co tak pouzit Systemovu premennu javy? Podla mna je to lepsie, ako pozerat kde sa nachadza class objektu this. Ajked je pravda, ze rozdiel v rieseni je(vypis je z ms windows/nekamenujte ma) a aj v tom, co clovek chce dosiahnut:
Kód: [Vybrat]

C:\garbage>java -jar xxx.jar
Current Working Directory(user.dir) : C:\garbage
This Class Directory: C:\garbage

C:\garbage>cd ..

C:\>java -jar garbage/xxx.jar
Current Working Directory(user.dir) : C:\
This Class Directory: C:\garbage

C:\>


user.dir     User's current working directory

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html)

google:

http://www.java-tips.org/java-se-tips/java.io/getting-current-working-directory.html (http://www.java-tips.org/java-se-tips/java.io/getting-current-working-directory.html)
http://www.exampledepot.com/egs/java.io/CurDir.html (http://www.exampledepot.com/egs/java.io/CurDir.html)
http://www.roseindia.net/java/example/java/io/GetCurrentDir.shtml (http://www.roseindia.net/java/example/java/io/GetCurrentDir.shtml)
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: existpierre 10 Července 2009, 11:23:21
tomuto som trosku nepochopil, user.dir nie je to, co chcem... user.dir prave vrati ten home co nechcem. pomohol mi predchadzajuci link
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: nettezzaumana 10 Července 2009, 11:42:08
co kdyby jsi zkusil irc, treba na irc.freenode.net a nebo nejake javovske forum?
tim nemyslim ze by me tve dotazy jakkoliv iritovaly, ale nepovazuji tento dotaz na tomto foru za neco, co alespon vzdalene pripomina "efektivni reseni problemu", nerkuli "hackers' attitude" ..

zdravim
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: jfoot 10 Července 2009, 12:22:11
Zdravím diskutující kolegy na tomto fóru,

co kdyby jsi zkusil irc, treba na irc.freenode.net a nebo nejake javovske forum?
tim nemyslim ze by me tve dotazy jakkoliv iritovaly, ale nepovazuji tento dotaz na tomto foru za neco, co alespon vzdalene pripomina "efektivni reseni problemu", nerkuli "hackers' attitude" ..

zdravim

přátelé je to pravda, možná tady diskutujeme nad věcmi, které jsou úzce specializované.
Nicméně : (fakt se nechci doktnout Bad Batz Maru, kterého si vážím za jeho profesionální schopnosti).
Bad Batz Maru,  prosím :
1. ponechte nám svobodu projevu na tomto fóru.
2. vedeme diskusi ve faktické rovině o problémech, které by mohly zajímat
    další účastníky fóra. Pokud si myslíte, že tomu tak není, projděte si prosím
   obsah některých threadů v sekci "Obecná diskuze", o čem se tam hovoří a
   aplikujte na tento obsah "hackers' attitude" ..
  Tato aplikace v tomto kontextu je samozřejmě nesmyslná, nicméně když stačí
  systémové prostředky na sekci "Obecná diskuze" (tím nenapadám tuto sekci,
   naopak, jsem rád, že existuje...) tak snad budou stačit i na těch pár příspěvků,
   které jsme měli v aktuálním threadu na téma Javy
3. Možná se Vám bude obsah uvedených příspěvků v budoucnosti hodit.
   Člověk nikdy neví, zvlášť v IT branži (což je Vám jako profesionálovi
   bezpochyby jasné). :D

Bad Batz Maru, dík za pochopení , neberte výše uvedené jako osobní útok. Pokud Vám připadá naše diskuse nemístná, tak pro Vás, jako pro pravého guru, nebude nesnadné ponořit se do chápajícího mlčení nad naší diskusí na tomto threadu.... ;D
Dík za pochopení a nerozviřujme to dále....

 
 
 
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: petergula 10 Července 2009, 12:58:26
To NTZ(BBM): Tiez si myslim, ze obecna java sem velmi nepatri, ale ked uz sa pyta tak mozme diskutovat nie?

To eXistPierre:
Citace
ja potrebujem ziskat cestu k aplikacii ktoru mam pustenu.
Citace
tomuto som trosku nepochopil, user.dir nie je to, co chcem... user.dir prave vrati ten home co nechcem. pomohol mi predchadzajuci link
no v tomto sme rozdielny, lebo ja rozlisujem dva pojmy:
- cesta k aplikacii ktoru mam pustenu ---> to je podla mna "user.dir", ajked sa priamo v tej ceste nenachadza tvoj class/jar file, ale pustil si ~/Plocha/program/program.jar  z domovskeho adresara, cize user.dir=user.home
- cesta ku tomu miestu kde je ulozeny jar subor, alebo class trieda ---> to je to co ukazuje ten priklad co Ti vyhovuje

este existuje aj cesta k domovskemu adresaru a ta je v "user.home"

Predstav si, ze pouzijes svoj system ziskavania cesty, potom po case sa Tvoja trieda presunie do nejakej kniznice, ta sa samozrejme presunie ku inym knizniciam do lib adresara a Tvoja metoda bude vracat uz tuto cestu(blablabla/blablabla/lib). A ty/tvoji nastupci zrazu budes/budu vyplaseny, ze co sa deje, preco to nejde(ak nebudete vzdy aplikaciu distribuovat ako jedno jedine malicke jarko). Tym chcem len povedat, ze ak sa odkazovat na cestu, kde budu ulozene napr. konfiguracie, tak je lepsie pouzivat systemovu premennu, alebo "user.home" a tam nieco pevne ako .nazovAplikacie, alebo "user.dir" a tam napr. config adresar. Pri pouziti "user.dir" ale treba pocitat s tym, ze nie je mozne napisat spustac ~/Plocha/program/program.jar, lebo inak samozrejme mate problem, ale zasa jeden batak, kde sa da jedno cd, nie je az tak vela nie? (cd ~/Plocha/program; java -jar program.jar)

Ale kedze Ti predosly prispevok pomohol, nebudem sa v tom uz viac vrtat.


Název: Re: Java - preco nejde read/write File ??
Přispěvatel: nettezzaumana 10 Července 2009, 14:15:53
hehe. BBM wants r*i*o*t*i*n*g

4petergula, jfoot ::
(http://img35.imageshack.us/img35/4890/heyr.gif)

ps. hlavne v klidu hosi, jen si diskutujte. nerikam ze toto tema sem nepatri ale rozporuji dle meho soudu neefektivnost reseni takoveho problemu ;) .. existpierra uz tu nejakou dobu vidam a povazuji ho za bystreho hocha, nicmene resit (v pravem slova vyznamu) podobny problem timto zpusobem .. jedine co mohu rict je :: kez bych mel tolik casu na blbosti jako ma kolaga e*pierre ..

btw. resim dnes a denne zdanlive neresitelne problemy (alespon zpocatku se tak zdaji) a taky se ptam zkusenejsich, ale nutnosti je u me ony problemy vyresit v realnem case .. takze jine nez specializovane forum nepripada v uvahu ..


zdravim a prdíííík
Název: Re: Java - preco nejde read/write File ??
Přispěvatel: jfoot 10 Července 2009, 14:23:54
hehe. BBM wants r*i*o*t*i*n*g

OK!!!!! ;D  ;D  ;D  ;D  ;D  ;D