- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
Van egy InputStream és van egy OutputStream. Közéjük lehetne-e úgy ékelni egy GZipOutputStream-et (és hogyan ), hogy egy nagy állományt ne kelljen először teljesen átpasszolni a gzippen, majd a kapott eredményt ne kelljen egy másik menetben átírni az OutputStream-re hanem egy menetben, ahogy a gzip egy blokkot tömörített, már küldje is a sima outputnak?
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
Előzőre valaki?
Más: A régi tanács, hogy sima String-eket nem konkatenálunk, valóban igaz még most is. Csináltam egy egyszerűbb html táblagenerálást. Úgy voltam vele, annyira nem lesz nagy tábla, meg majd csak kioptimalizálja a JDK11.
Háát. Tetülassú volt a generálás, legalább 2-3mp volt érzésre, azt hittem valamit a rendezés körül rontottam el, aztán eszembe jutott a régi intelem, lecseréltem a függvényen belül a konkat nagyját StringBuilder append függvényére, mert csak egy szálon fut a generálás és most csak úgy ugrik befele kérésre az oldal böngészőn át -
E.Kaufmann
veterán
Van egy kisebb méretű állomány egy meghajtón (<1MByte), amit egy java program ütemezett időközönként beolvas csak olvasásra és szeretném ha nem akadna össze, ha épp szerkesztenék azt az állományt. Hogy érdemes ezt az állományt feldolgozni Java alatt? Gyorsan behúznám a memóriába egy másolatát, de még ezidő alatt is szeretném, ha szerkeszthető maradna az állomány. Hogy érdemes feldolgozni?
-
E.Kaufmann
veterán
Ahogy nézem, a Maven-es feltételnek pont nem felel meg, de úgy is ismerkednem kellene vele és az új NetBeans is a Maven projekteket tette alapértelmezetté. Köszönöm.
-
E.Kaufmann
veterán
Na hogy ON.
Tud valaki ajánlani egyszerűbb NN "könyvtárat" egyszerűbb feladatokhoz, aminek nincs rahedli függősége, Maven nélkül is behúzható egy-két jar felcsatolásával és könnyű tanítani is? -
E.Kaufmann
veterán
Én a következőket láttam: SAP-B1, Vectory, IBSystem/Infosys, nézegetek most egy negyediket. Van egy darab közös adatbázis mögöttük egy rahedli táblázattal. Vannak ugyan programmmodulok, de azok nem közvetlen egymással, hanem az adatbázissal beszélgetnek.
Ha meg van egy tényleg külön modul, ami pl a vonalkódos rendszerért felelős vagy a gyártás rögzítéséért, akkor az külön fájdalom a hátsóba, ha saját adatbázisába ír, mert tuti nem tudják megoldani tisztességesen a két adatbázis közötti kommunikációt. (legalább is sok rossz példát láttam sajnos, főleg akkor problémás ha más az ERP és a vonalkódos rendszer szállítója, valamint egy közismert magyar Bérszámfejtő "fűszerrel" is sok gond van összepasszintani teljes mértékben ERP-vel, már ha nem kézzel akarunk adatokat importálni/exportálni)Én ezt az ábrát néztem microservice-re, de lehet nem jó:

vannak kisebb szolgáltatások, melyek egy részét többen is elérik közvetlenül, másokat több másik szolgáltatás is buzgerál egyszerre.10598: értem, hogy egy közepesnél nagyobb cégnél már gond a skálázhatóság miatt, de kis cégeknél inkább plusz kín ez a szemlélet. Tudom, ők menjenek a felhőbe ERP-zni

-
E.Kaufmann
veterán
Jájjjj, még egy technobullshit. Mint annó a web 2.0.
Az ábrákat elnézve nem egy nagy közös adatbázis van, hanem több kicsi , adott részterületenként egy, de ugyanúgy egy részterületet egyszerre többen is elérhetnek és el is kell érniük, szóval a lényeg ugyanaz szvsz, pláne az eredeti kérdés szempontjából.
Ez max az ERP rugalmasságát biztosítja. -
E.Kaufmann
veterán
-
E.Kaufmann
veterán
Viszont működik és naplózhatóvá válhatnak a kommunikációk, amivel pl könnyebben visszaállítható egy előző állapot, valamint ha kettőnél több fél vesz részt a kommunikációban, akkor a konkurencia kezelés is könnyebb adatbázissal. Persze lehet, hogy adott feladathoz ágyúval verébre.
-
E.Kaufmann
veterán
Én most olyat csináltam, hogy fogtam egy objektumot, serializáltam, gzippeltem, majd base64-be kódoltam (egyesek szerint felesleges az utóbbi, de biztos ami biztos és a gzip is csak a base64 kódolásból eredő méretnövekedés kompenzálására került be) és http-n át nyomattam.
Ha guglizol, megtalálod, hogy az első három művelet megoldható 1-1 sorból és van java alatt egyszerű http szerver és kliens is, ha nem a biztonság hanem a gyakorlás vagy a gyors elkészítés a fő szempont.
A http kérésbe beágyazhatsz paramétert, ami alapján tudja a szervered, hogy mit is kérsz tőle, az alapján megképzed az objektumot és a fentebb sorolt műveletekkel elküldöd válaszként a kliensnek, a kliens meg elvégzi az ellentétes műveleteket.De más módok is létezhetnek és én is kíváncsi vagyok, ki mit ajánl. Én azért a HTTP-t választottam, mert kellett egy táblázat emberi formában olvasható módon és kliens programmal elérhetően is és egyszerűbb volt egy protokollal megoldani.
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
Miért? Megsértettünk?
![;]](//cdn.rios.hu/dl/s/v1.gif)
-
E.Kaufmann
veterán
Itt a fórumon eddig öten is ajánlották a Udemy-t, nekik is szólj már légyszi, köszönöm.
-
E.Kaufmann
veterán
Én nem mondom magamat profi Java-snak, de eddig munkahelyen, ami feladatot rendesen körül tudtak írni és voltak is hozzá adatok, azt mind megoldottam.
Ha már van valamennyi alapod (tudsz bohóckodni listákkal, tömbökkel, stringekkel és az IO alrendszerből is láttál pár példát), keress egy olyan feladatot, ami érdekes is de nem túl nagyszabású és próbáld megcsinálni, menet közben úgy is egy halmot kell majd gugliznod, ki kell próbálnod különféle utakat és ragad az emberre. Szerintem annál nincs jobb, ha apróbb sikerélményei vannak az embernek és látja, hogy halad, még ha nem is alkot szép és biztonságos kódot (tudom, Java a többségét elintézi a dolgoknak, de nem is a memóriafoglalásra gondoltam, hanem pl egy olyan hálózatos alkalmazásra, ami otthon jól működik, de a neten kapásból szétkapnák)
Én akkor ugrottam szintet saját érzésre, mikor egy ismerősnek kezdtem maszekolni. Igaz végül nem lett belőle semmi, mert pénzügyi dolgon összevesztünk.
Volt nálam pár tanuló gyakorlaton, egyiküknek kiadtam (bár lényegében közösen csináltuk) egy duplikált fájlkereső alkalmazást. Nem nagy feladat, de újoncnak pl annál nagyobb móka.Egyébként mostanában a Udemy fizetős tananyagait ajánlják, ha mindenáron tananyagként szeretnéd tanulni, vagy kellenek az alapok.
Ja és minimális angol sem árt, de nem kell irodalmi szint. Szakszavak meg pár ige ismerete

-
E.Kaufmann
veterán
Tegnap picit még püföltem a kódon:
- kettévettem a poireplace függvényt,
- megcsináltam, hogy elvileg működjön fejléccel és lábléccel is, de ez nem lett alaposabban tesztelve
- néha írt hibaüzeneteket a Word, hogy a fájl meg van már nyitva, így bezártam az input és output állományt is a függvény végén
- kicsit sztrímesítettem, ha valakinek gondja lenne vele, távolítsa el a kódból elsőnek a .parallel() részeket:private static void paragReplace(XWPFParagraph p,java.util.HashMap<String,String> hs){
String text = p.getText();
boolean change=false;
for ( String key : hs.keySet() ) {
if (text != null && text.contains("${"+key+"}")) {
text = text.replace("${"+key+"}", hs.get(key));
change=true;
}
}
if(change){
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
String ff=runs.get(0).getFontFamily();
int fs=runs.get(0).getFontSize();
removeAllRuns(p);
insertReplacementRuns(p,text,ff,fs);
}
}
}
public static void poiReplace(java.util.HashMap<String,String> hs, String in, String out) throws Exception
{
//Bekezdések
java.io.FileInputStream ins=new java.io.FileInputStream(in);
XWPFDocument doc = new XWPFDocument(ins);
doc.getParagraphs().stream().parallel()
.forEach((p) -> {
paragReplace(p,hs);
}
);
//Táblázatok
doc.getTables().stream().parallel()
.forEach((tbl) -> {tbl.getRows().stream()
.forEach((row) -> {row.getTableCells().stream()
.forEach((cell) -> {cell.getParagraphs().stream()
.forEach((p) -> {
paragReplace(p,hs);
});
});
});
}
);
//Fejléc bekezdések és táblázatok
doc.getHeaderList().stream().forEach( (hdr) ->
{
hdr.getParagraphs().stream().parallel()
.forEach((p) -> {
paragReplace(p,hs);
});
hdr.getTables().stream().parallel()
.forEach((tbl) -> {tbl.getRows().stream()
.forEach((row) -> {row.getTableCells().stream()
.forEach((cell) -> {cell.getParagraphs().stream()
.forEach((p) -> {
paragReplace(p,hs);
});
});
});
});
}
);
//Lábléc bekezdések és táblázatok
doc.getFooterList().stream().forEach( (ftr) ->
{
ftr.getParagraphs().stream().parallel()
.forEach((p) -> {
paragReplace(p,hs);
});
ftr.getTables().stream().parallel()
.forEach((tbl) -> {tbl.getRows().stream()
.forEach((row) -> {row.getTableCells().stream()
.forEach((cell) -> {cell.getParagraphs().stream()
.forEach((p) -> {
paragReplace(p,hs);
});
});
});
});
}
);
doc.write(new java.io.FileOutputStream(out));
doc.close();
ins.close();
} -
E.Kaufmann
veterán
Ha valakinek kellene DOCX "sablon" (változókkal ellátott DOCX doksi) kitöltése Apache POI-val (és StringUtils-szal), akkor itt az én módszerem.
Két-három StackOverFlow-os példát kicsit össze kellett gyúrni, hogy megtalálja a változókat és sortörést és formázást is jól kezeljen:
A lényeg, hogy a változónevek a docx-ben ${változónév} formában szerepeljenek, valamint a változók és a helyettesítő szövegek egy HashMap<String,String> objektumban vannak, ahol a key a változónév csupaszon, a value meg a helyettesítő érték.
Docx4j így kezelte, és nem akartam mindent újraírni.
Mindenesetre mind az IDE mind a java fellélegzett, hogy kiszedtem a Docx4j-t meg a függőségeit
private static void removeAllRuns(XWPFParagraph paragraph) {
int size = paragraph.getRuns().size();
for (int i = 0; i < size; i++) {
paragraph.removeRun(0);
}
}
private static void insertReplacementRuns(
XWPFParagraph paragraph, String replacedText,
String fontFamily, int fontSize)
{
String[] replacementTextSplitOnCarriageReturn = StringUtils.split(replacedText, "\n");
XWPFRun newRun = paragraph.insertNewRun(0);
newRun.setFontFamily(fontFamily);
newRun.setFontSize(fontSize);
String part = replacementTextSplitOnCarriageReturn[0];
newRun.setText(part,0);
for (int j = 1; j < replacementTextSplitOnCarriageReturn.length; j++) {
part = replacementTextSplitOnCarriageReturn[j];
newRun.addBreak();
newRun.setText(part);
}
}
public static void poiReplace(java.util.HashMap<String,String> hs, String in, String out) throws Exception
{
XWPFDocument doc = new XWPFDocument(new java.io.FileInputStream(in));
for (XWPFParagraph p : doc.getParagraphs()) {
String text = p.getText();
boolean change=false;
for ( String key : hs.keySet() ) {
if (text != null && text.contains("${"+key+"}")) {
text = text.replace("${"+key+"}", hs.get(key));
change=true;
System.out.println("\nx\n"+p.getText()+"\n"+key+"\n"+hs.get(key));
}
}
if(change){
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
String ff=runs.get(0).getFontFamily();
int fs=runs.get(0).getFontSize();
removeAllRuns(p);
insertReplacementRuns(p,text,ff,fs);
}
}
}
for (XWPFTable tbl : doc.getTables()) {
for (XWPFTableRow row : tbl.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph p : cell.getParagraphs()) {
String text = p.getText();
boolean change=false;
for ( String key : hs.keySet() ) {
if (text != null && text.contains("${"+key+"}")) {
text = text.replace("${"+key+"}", hs.get(key));
change=true;
}
}
if(change){
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
String ff=runs.get(0).getFontFamily();
int fs=runs.get(0).getFontSize();
removeAllRuns(p);
insertReplacementRuns(p,text,ff,fs);
}
}
}
}
}
}
doc.write(new java.io.FileOutputStream(out));
doc.close();
}A poiReplace függvényt kell hívni, a másik kettőt meg a poiReplace hívogatja.
-
E.Kaufmann
veterán

Na mindegy, eddig müxeni látszik a B megoldás, csak próbáltam a 8.0-ásról 8.1.1-re frissíteni a docx4j-t, de elrontja a docx-et, szóközöket von egybe. Úgyhogy visszaálltam 8-ra. -
E.Kaufmann
veterán

Csak jobb lenne patkolás nélkül. Várom. -
E.Kaufmann
veterán
Na közben megszületett a tákolmány
![;]](//cdn.rios.hu/dl/s/v1.gif)
Állandóan nyafogott a docx4j, hogy nincs konfig ezért az alapértelmezettet tölti be, úgyhogy ezt is megoldottam egy csapással:public static void preInit(){
//preinit docx4j
// supress system.err
java.io.PrintStream _err = System.err;
try{
System.setErr(new java.io.PrintStream(new java.io.OutputStream() {
public void write(int b) {
}
}));
//preinit without file
WordprocessingMLPackage.load(new java.io.ByteArrayInputStream(new byte[0]));
}
catch(Exception e){}
//recover system.err
System.setErr(_err);
} -
E.Kaufmann
veterán
Szia! Köszönöm a választ, POI-t használom az XLSX-ekhez, de nem találtam működő példát docx-hez. Nem tudnál egy linket dobni egy egyszerűbb docx kitöltésről POI-val?
-
E.Kaufmann
veterán
Ha már így összejöttek itt a szakik egy kérdés.
Használom a docx4j projektet egyszerűbb docx doksik generálásához mintából. Projekt oldala: [link]Ha valaki esetleg használja, meg tudná mondani, hogy az első doksi generálása miért olyan hosszú?
Látszólag megfagy az ezt használó projekt az indításától számított első variableReplace() hívásnál 5 mp-re, de újabb doksik generálása már pikk-pakk megy. Kínomban már inkább indításkor generálok valami kamu doksit. -
E.Kaufmann
veterán
Gondolom levágja az elejét és csak az utolsó bájtot tartja meg (na ez megint jó kérdés, hogy a jvm milyen sorrendben tárolja a bájtokat és meg nem mondom). Ha a végét vágná le, akkor nem váltana előjelet, legalább is ha elől (bocs a pontatlanságért, talán "most significant bit"-nek lehetne nevezni, balról az első
) van az előjelbit.
Majd ha ráér egy okos, írja le mert én is kíváncsi vok
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
Informatikusnak hogy a piklibe ne kéne programozás? Még egy rendszergazdának is. Már csak azért is, hogy saját dolgodat megkönnyítsd. Igaz én a Java-t kalapácsnak használom és mindent azzal püfölök, olyat is amit pl PS-sel, bash-sal vagy más eszközzel lenne érdemes, de csináltam már java-s reboot programot kínai telefonközponthoz, amit ha nem indítottunk újra naponta, a hívások nem mentek. Betelnetelt rá és kiadta a parancsot. Debian alatt futott cron-ból. Tudom, hogy lehettek volna elegánsabb megvalósításai, de működött. Ugyanígy a régi ERP nem volt képes ütemezett üzeneteket küdeni, egy java-s programocska lekérdezett valamit SQL-lel JDBC-n át és ha kellett, küldött SMTP-n át levelet.
Volt hogy rámlőcsöltek adatrögzítést, csináltam hozzá az ERP által kínáltnál ezerszer kényelmesebb felviteli felületet és onnan nyomtam be az adatokat az ERP-be, ami szintén nem ajánlott, de soha semmi gondot nem okozott.Én imádom a Java-t, mert mindent meg tudok benne csinálni, még ha tudom is, hogy nem kellene mindent benne.
Az a lényeg, hogy egyszerűbb scriptek és programozási ismeretek nélkül a rendszergizda kartalan órás (direkt hagytam le az i-t). -
E.Kaufmann
veterán
Én a bekért szöveget előbb pl toLowerCase()-vel kisbetűsíteném és utána már kevesebb feltétel kell. Én legalább is, ha nem számít a kis/nagybetű, akkor a biztonság kedvéért mindent tolowerezek (meg trimmelek).
-
E.Kaufmann
veterán
Jaja, fa struktúrájú adatok bejárásánál tud jól jönni, ugyanakkor túl kiterjedt szerkezeteknél nem biztos, hogy jó ötlet, marha sok memóriát fel tud emészteni, valamint egzotikus memóriahibákat dobhat a jvm, még ha a gépben van is elég memória, csak épp a programverem, vagy minek hívják, túlcsordul: [link]
Érdemes ciklusokra visszavezetni a megoldást rekurzió helyett. -
E.Kaufmann
veterán
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
-
E.Kaufmann
veterán
Én is inkább SQL párti vagyok, de pölö ez alapján nem akkora wasistdas egyszerű objektumok adat benyomni XML-be, de gondolom a kiolvasás se nehezebb: [link]
Nem tudom,mik a megkötések, én kezdéskor simán beolvasnám ArrayList-be a már létező adatokat, azt olvasnám/bővítgetném/módosítgatnám, szükség esetén meg a változásokat vagy akár az egészet visszaírnám. Ha nagyon szőrszálhasogató a tanárod, amúgy is biztos találhat valamit, amibe beleköthet, ha akar, ha meg nem, akkor szvsz az XML a legegyszerűbb út számodra.
Új hozzászólás Aktív témák
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Luck Dragon: Asszociációs játék. :)
- Házimozi belépő szinten
- Miért drága a Mac és mikor éri meg igazán?
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Azonnali fotós kérdések órája
- Samsung kuponkunyeráló
- Gaming notebook topik
- iPhone topik
- Évekre előre elszipkázzák az adattárolókat az AI adatközpontok
- Motoros topic
- További aktív témák...
- Acer Aspire 5 A515 15col FullHD / i3-11gen/ 12gb ram / 256gb SSD + 2,5col ssd / WIN11
- Lenovo Ideapad 530s / Ryzen 7 AMD / 12gb RAM / 256gb NvMe ssd / WIN11 / Világitó Bill
- EVGA RTX 3080 10GB GDDR6X XC3 ULTRA GAMING Eladó!
- EVGA RTX 3080 10GB GDDR6X FTW3 ULTRA GAMING Eladó!
- Precision 7670 27% 16" FHD+ IPS i7-12850HX RTX A4500 64GB 2TB NVMe SSD magyar vbill gar
- Telefon felvásárlás!! iPhone X/iPhone Xs/iPhone XR/iPhone Xs Max
- 27% - NZXT Kraken 240 vízhűtés!
- AKCIÓ! Dell Precision 3571 i7-12700H 16GB 512GB FHD RTX T600 4GB 1 év teljeskörű garancia
- Samsung Galaxy S23 Ultra 512GB,Újszerű,Dobozaval,12 hónap garanciával
- Keresünk iPhone 16/16e/16 Plus/16 Pro/16 Pro Max
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

.
, de még az se biztos, hogy a webes felület lesz a nyerő, ez csak egyike a megjelenítési formáknak, lehet, az lesz a vége, hogy egy egyszerűbb droidos felülethez kell majd egy primitív http konnektor.
, amúgy én elégedett vagyok most a StringBuilderrel, csak ezért nem váltom le a JDK-t, csak érdekes volt, hogy nyers "+" operátorral és String-gel ennyire lomha volt.





