<html>
<head>
<meta name="viewport" content="width=device-width" />
<base href="http://wiki.javaforum.hu" />
<style type="text/css">
body, #email-content, #email-content-inner { font-family: Arial,FreeSans,Helvetica,sans-serif; }
body, p, blockquote, pre, code, td, th, li, dt, dd { font-size: 13px; }
small { font-size: 11px; }
body { width:100% !important; -webkit-font-smoothing: antialiased; }
body,
#email-wrapper { background-color: #f0f0f0; }
#email-wrapper-inner { padding: 20px; text-align: center; }
#email-content-inner { background-color: #fff; border: 1px solid #bbb; color: $menuTxtColour; padding:20px; text-align:left; }
#email-wrapper-inner > table { width: 100%; }
#email-wrapper-inner.thin > table { margin: 0 auto; width: 50%; }
#email-footer { padding: 0 16px 32px 16px; margin: 0; }
.email-indent { margin: 8px 0 16px 0; }
.email-comment { margin: 0 0 0 56px; }
#email-title-avatar { text-align: left; vertical-align: top; width: 56px; }
#email-title-flavor { margin: 0; padding: 0 0 4px 0; }
#email-title-heading { font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0; }
#email-title .icon { border: 0; padding: 0 2px 0 0; text-align: left; }
#email-actions { border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; }
#email-actions td { padding-top: 8px; }
#email-actions .left { max-width: 45%; text-align: left; }
#email-actions .right { text-align: right; }
.email-reply-divider { border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px 0; padding: 8px 0; }
.email-section-title { border-bottom: 1px solid #bbb; margin: 8px 0; padding: 8px 0 0 0; }
.email-metadata { color: #505050; }
a { color: #326ca6; text-decoration: none; }
a:hover { color: #336ca6; text-decoration: underline; }
a:active {color: #326ca6; }
a.email-footer-link { color: #505050; font-size: 11px; }
.email-item-list { list-style: none; margin: 4px 0; padding-left: 0; }
.email-item-list li { list-style: none; margin: 0; padding: 4px 0; }
.email-list-divider { color: #505050; padding: 0 0.35em; }
.avatar { -ms-interpolation-mode: bicubic; }
.avatar-link { margin: 2px; }
.tableview th { border-bottom: 1px solid #69C; font-weight: bold; text-align: left; }
.tableview td { border-bottom: 1px solid #bbbbbb; text-align: left; padding: 4px 16px 4px 0; }
.aui-message { margin: 1em 0; padding: 8px; }
.aui-message.info { background-color: #e0f0ff; border: 1px solid #9eb6d4; }
.aui-message.success { background-color: #ddfade; border: 1px solid #93c49f; }
.aui-message.error,
.aui-message.removed { background-color: #ffe7e7; border: 1px solid #df9898; color: #000; }
.call-to-action-table { margin: 10px 1px 1px 1px;}
.call-to-action-container { text-align: right; padding: 5px 20px; border: 1px solid #326396; background-color: #6495C7; border-radius: 3px;}
.call-to-action-container a.call-to-action-button { background-color: #6495C7; font-size: 15pt; line-height: 1; padding: 0; margin: 0; color: #fff; }
@media handheld, only screen and (max-device-width: 480px) {
div, a, p, td, th, li, dt, dd { -webkit-text-size-adjust: auto; }
small, small a { -webkit-text-size-adjust: 90%; }
td[id=email-wrapper-inner] { padding: 2px !important; }
td[id=email-content-inner] { padding: 8px !important; }
td[id="email-wrapper-inner"][class="thin"] > table { text-align: left !important; width: 100% !important; }
td[id=email-footer] { padding: 8px 12px !important; }
div[class=email-indent] { margin: 8px 0px !important; }
div[class=email-comment] { margin: 0 !important; }
p[id=email-title-flavor] a { display: block; } /* puts the username and the action on separate lines */
p[id=email-permalink] { padding: 4px 0 0 0 !important; }
table[id=email-actions] td { padding-top: 0 !important; }
table[id=email-actions] td.right { text-align: right !important; }
table[id=email-actions] .email-list-item { display: block; margin: 1em 0 !important; word-wrap: normal !important; }
span[class=email-list-divider] { display: none; }
}
</style>
</head>
<body bgcolor="#f0f0f0" topmargin="0" leftmargin="0" marginheight="0" marginwidth="0" style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; width: 100%; -webkit-font-smoothing: antialiased; background-color: #f0f0f0">
<table id="email-wrapper" width="100%" cellspacing="0" cellpadding="0" border="0" style="background-color: #f0f0f0">
<tbody>
<tr valign="middle">
<td id="email-wrapper-inner" style="font-size: 13px; padding: 20px; text-align: center">
<table id="email-content" cellspacing="0" cellpadding="0" border="0" style="font-family: Arial, FreeSans, Helvetica, sans-serif; width: 100%">
<tbody>
<tr valign="top">
<td id="email-content-inner" align="left" style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; background-color: #fff; border: 1px solid #bbb; padding: 20px; text-align: left">
<table id="email-title" cellpadding="0" cellspacing="0" border="0" width="100%">
<tbody>
<tr>
<td id="email-title-avatar" rowspan="2" style="font-size: 13px; text-align: left; vertical-align: top; width: 56px"> <img class="avatar" src="cid:avatar_d7177d5506ab05ef431ea35647b597a3" border="0" height="48" width="48" style="-ms-interpolation-mode: bicubic" /> </td>
<td valign="top" style="font-size: 13px">
<div id="email-title-flavor" class="email-metadata" style="margin: 0; padding: 0 0 4px 0; color: #505050">
<a href="http://wiki.javaforum.hu/display/~auth.gabor" style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Auth Gábor</a> wrote a blog post:
</div> </td>
</tr>
<tr>
<td valign="top" style="font-size: 13px"> <h2 id="email-title-heading" style="font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0"> <a href="http://wiki.javaforum.hu/display/JAVAFORUM/2012/08/12/NIO.2" style="color: #326ca6; text-decoration: none"> <img class="icon" src="cid:blogpost-icon" alt="" style="border: 0; padding: 0 2px 0 0; text-align: left" /> <strong style="font-size:16px;line-height:20px;vertical-align:top;">NIO.2</strong> </a> </h2> </td>
</tr>
</tbody>
</table>
<div class="email-indent" style="margin: 8px 0 16px 0">
<div class="email-page">
<p style="font-size: 13px">A Java7 megjelenését megelőzően nagy várakozás övezte a NIO.2 újdonságait, aztán elmúlt a <em>hype</em>. Ennek oka valószínűleg az lehet, hogy a Java jelenleg két erős területén – az Android és a Java EE platformon – nincs igazán szükség a fájlműveletek támogatására. Az Android esetén megtűrt dolognak számít a fájlrendszer, az SQLite alapú tárterület a támogatott; Java EE esetén pedig deklaráltan nem alapozunk a fájlrendszerre.</p>
<p style="font-size: 13px">Nem mindenki lehet Android vagy Java EE fejlesztő – szükséges az IDE-k fejlesztése is :), ezért nézzük át, milyen előnyöket ad a <a href="http://docs.oracle.com/javase/tutorial/essential/io/fileio.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">NIO.2</a>, amely alapvetően a Java eddigi fájlrendszer modelljét bővíti ki az alábbiakkal:</p>
<ul>
<li style="font-size: 13px">Platform független fájlrendszer modell</li>
<li style="font-size: 13px">Fájlrendszer-fa feltérképezés</li>
<li style="font-size: 13px">Az állományműveletek atomi támogatása (másolás, törlés, mozgatás)</li>
<li style="font-size: 13px">Soft- és hard-link támogatás</li>
<li style="font-size: 13px">Fájl attribútumok kezelése</li>
<li style="font-size: 13px">Változás követés</li>
<li style="font-size: 13px">SPI támogatás</li>
</ul>
<p style="font-size: 13px">Nézzük ezeket egyenként... <img class="emoticon emoticon-smile" src="/s/en_GB/3284/7/_/images/icons/emoticons/smile.png" data-emoticon-name="smile" alt="(smile)" /></p>
<h2 id="NIO2-Platformfüggetlenfájlrendszermodell">Platform független fájlrendszer modell</h2>
<p style="font-size: 13px">A Java7 NIO.2 kapcsán került bevezetésre a <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">Path</a> osztály, amely az eddigi megoldások mellett lehetővé teszi az elérési útvonalak platformra való fordítását. Emlékezzünk: egy csomó problémánk volt abból, hogy <em>Unix like</em> rendszereken a fájlrendszer kiinduló pontja a <em>/</em> volt, míg Windows és Windows fájlkezelését emuláló rendszerek (emlékeim szerint például a Symbian) esetén voltak meghajtók, így több gyökere is volt a fájlrendszereknek, illetve az elérési útvonalon a szinteket elválasztó jel a / helyett a \ volt, így a multiplatformos programjaink tele voltak platformfüggő elágazásokkal, illetve File.separator összefűzésekkel. Nem beszélve a soft- és hard-link támogatásról, a valódi elérési út felderítéséről és a többi apróságról... Na, ennek végre vége... <img class="emoticon emoticon-smile" src="/s/en_GB/3284/7/_/images/icons/emoticons/smile.png" data-emoticon-name="smile" alt="(smile)" /></p>
<h2 id="NIO2-Fájlrendszer-fafeltérképezés">Fájlrendszer-fa feltérképezés</h2>
<p style="font-size: 13px">A fájlrendszer-fa feltérképezése azon igények egyike, amelyre eddig még nem volt szükségem, de örülök, hogy a NIO.2 ezt már támogatja, az alkalmazás szerverek, illetve a különféle szerver oldali Java megoldások fejlesztői nyilván örülnek egy ilyen lehetőségnek. A módszer a Visitor minta alapján épül fel, ezért hozzunk létre egy saját Visitor-t, amely egyszerűen csak kiírja a kapott Path példányt:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: true" style="font-size:12px;; font-size: 13px">public class FileVisitor extends SimpleFileVisitor<Path>
{
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
{
System.out.println(file);
return FileVisitResult.CONTINUE;
}
}</pre>
</div>
</div>
<p style="font-size: 13px">Ezek után már csak meg kell hívnunk:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: true" style="font-size:12px;; font-size: 13px">Path basePath = Paths.get(".");
try
{
Files.walkFileTree(basePath, new FileVisitor());
} catch (IOException ex)
{
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}</pre>
</div>
</div>
<p style="font-size: 13px">Az eredmény nem marad el:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size:12px;; font-size: 13px">./pom.xml
./src/test/java/hu/javaforum/testproject/AppTest.java
./src/main/java/hu/javaforum/testproject/App.java
./target/classes/hu/javaforum/testproject/App$FileVisitor.class
./target/classes/hu/javaforum/testproject/App$1.class
./target/classes/hu/javaforum/testproject/App.class</pre>
</div>
</div>
<h2 id="NIO2-Azállományműveletekatomitámogatása">Az állományműveletek atomi támogatása</h2>
<p style="font-size: 13px">Sajnos a Java hetes verzióig kellett várnunk arra, hogy egy fájlt át tudjunk mozgatni vagy akár csak átnevezni... ez is már a múlté... <img class="emoticon emoticon-smile" src="/s/en_GB/3284/7/_/images/icons/emoticons/smile.png" data-emoticon-name="smile" alt="(smile)" /></p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size:12px;; font-size: 13px">> ls -l /tmp/test*
-rw-r--r-- 1 auth.gabor users 5 aug 12 12.30 /tmp/test</pre>
</div>
</div>
<p style="font-size: 13px">Tekintsük a fenti egy darab állományt, amelyet szeretnénk átmásolni <em>test2</em> névre, majd átnevezni <em>test3</em> névre:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: true" style="font-size:12px;; font-size: 13px">Path srcFile = Paths.get("/tmp/test");
Path dstFile = Paths.get("/tmp/test2");
Path moveFile = Paths.get("/tmp/test3");
Files.copy(srcFile, dstFile, StandardCopyOption.COPY_ATTRIBUTES);
Files.move(srcFile, moveFile, StandardCopyOption.ATOMIC_MOVE);</pre>
</div>
</div>
<p style="font-size: 13px">És az eredmény nem marad el:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size:12px;; font-size: 13px">> ls -l /tmp/test*
-rw-r--r-- 1 auth.gabor users 5 aug 12 12.30 /tmp/test2
-rw-r--r-- 1 auth.gabor users 5 aug 12 12.30 /tmp/test3</pre>
</div>
</div>
<p style="font-size: 13px">Ez Java7 előtt egy több tucat soros varázslatra volt szükség egy ilyen igény teljesítéséhez.</p>
<h2 id="NIO2-Soft-éshard-linktámogatás">Soft- és hard-link támogatás</h2>
<p style="font-size: 13px">A NIO.2 előtt erre nem volt lehetőség, nem lehetett megállapítani egy elérési útról, hogy az tartalmaz-e linkeket vagy sem, most már vannak eszközeink.</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size:12px;; font-size: 13px">> ls -l /tmp/test*
-rw-r--r-- 1 auth.gabor users 5 aug 12 12.30 /tmp/test</pre>
</div>
</div>
<p style="font-size: 13px">Hozzunk létre egy soft- (symbolic-) és egy hard-linket:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: true" style="font-size:12px;; font-size: 13px">Path srcFile = Paths.get("/tmp/test");
Path softLinkFile = Paths.get("/tmp/test2");
Path hardLinkFile = Paths.get("/tmp/test3");
Files.createSymbolicLink(softLinkFile, srcFile);
Files.createLink(hardLinkFile, srcFile);
System.out.println("isSymbolicLink:");
System.out.println(srcFile + ": " + Files.isSymbolicLink(srcFile));
System.out.println(softLinkFile + ": " + Files.isSymbolicLink(softLinkFile));
System.out.println(hardLinkFile + ": " + Files.isSymbolicLink(hardLinkFile));</pre>
</div>
</div>
<p style="font-size: 13px">Az eredmény nem marad el:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size:12px;; font-size: 13px">isSymbolicLink:
/tmp/test: false
/tmp/test2: true
/tmp/test3: false</pre>
</div>
</div>
<p style="font-size: 13px">A fájlrendszernél is látszik az átlinkelés, illetve a link számláló a hard-link esetén:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size:12px;; font-size: 13px">> ls -l /tmp/test*
-rw-r--r-- 2 auth.gabor users 5 aug 12 12.30 /tmp/test
lrwxrwxrwx 1 auth.gabor users 9 aug 12 12.44 /tmp/test2 -> /tmp/test
-rw-r--r-- 2 auth.gabor users 5 aug 12 12.30 /tmp/test3</pre>
</div>
</div>
<h2 id="NIO2-Fájlattribútumokkezelése">Fájl attribútumok kezelése</h2>
<p style="font-size: 13px">Ha le szeretnénk kérdezni egy adott fájl attribútumait, akkor a legtöbb példában megemlítésre kerül a JNI vagy a széttárt kéz, mivel erre túl sok eszközünk nem volt a Java platformot tekintve, s sajnos a megfelelő megoldásra egészen a Java7 megjelenéséig várnunk kellett. A fentiekhez hasonlóan a megoldás egyszerű, csak azt kell eldöntenünk, hogy milyen attribútumokat szeretnénk kiolvasni (a teljesség igénye nélkül):</p>
<ul>
<li style="font-size: 13px"><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/BasicFileAttributeView.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">BasicFileAttributeView</a></li>
<li style="font-size: 13px"><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/DosFileAttributeView.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">DosFileAttributeView</a></li>
<li style="font-size: 13px"><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/PosixFileAttributeView.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">PosixFileAttributeView</a></li>
<li style="font-size: 13px"><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/UserDefinedFileAttributeView.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">UserDefinedFileAttributeView</a></li>
<li style="font-size: 13px"><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/AclFileAttributeView.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">AclFileAttributeView</a></li>
<li style="font-size: 13px"><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/FileOwnerAttributeView.html" class="external-link" rel="nofollow" style="color: #326ca6; text-decoration: none">FileOwnerAttributeView</a></li>
</ul>
<p style="font-size: 13px">Fogjunk egy megfelelő áldozatot és vallassuk ki:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: true" style="font-size:12px;; font-size: 13px">BasicFileAttributes bfa = Files.readAttributes(srcFile, BasicFileAttributes.class);
DosFileAttributes dfa = Files.readAttributes(srcFile, DosFileAttributes.class);
PosixFileAttributes pfa = Files.readAttributes(srcFile, PosixFileAttributes.class);
AclFileAttributeView afa = Files.getFileAttributeView(srcFile, AclFileAttributeView.class);
FileOwnerAttributeView foa = Files.getFileAttributeView(srcFile, FileOwnerAttributeView.class);
System.out.println("BasicFileAttributes:");
System.out.println(srcFile + ":creationTime " + bfa.creationTime());
System.out.println(srcFile + ":isDirectory " + bfa.isDirectory());
System.out.println(srcFile + ":isOther " + bfa.isOther());
System.out.println(srcFile + ":isRegularFile " + bfa.isRegularFile());
System.out.println(srcFile + ":isSymbolicLink " + bfa.isSymbolicLink());
System.out.println(srcFile + ":lastAccessTime " + bfa.lastAccessTime());
System.out.println(srcFile + ":lastModifiedTime " + bfa.lastModifiedTime());
System.out.println(srcFile + ":size " + bfa.size());
System.out.println("DosFileAttributes:");
System.out.println(srcFile + ":isArchive " + dfa.isArchive());
System.out.println(srcFile + ":isHidden " + dfa.isHidden());
System.out.println(srcFile + ":isReadOnly " + dfa.isReadOnly());
System.out.println(srcFile + ":isSystem " + dfa.isSystem());
System.out.println("PosixFileAttributes:");
System.out.println(srcFile + ":group " + pfa.group());
System.out.println(srcFile + ":owner " + pfa.owner());
System.out.println(srcFile + ":permissions " + pfa.permissions());
System.out.println("AclFileAttributeView:");
if (afa != null)
{
System.out.println(srcFile + ":getAcl " + afa.getAcl());
}
System.out.println("FileOwnerAttributeView:");
if (foa != null)
{
System.out.println(srcFile + ":getOwner " + foa.getOwner());
}</pre>
</div>
</div>
<p style="font-size: 13px">Majd nézzük meg, mit mesélt magáról:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size:12px;; font-size: 13px">BasicFileAttributes:
/tmp/test:creationTime 2012-08-12T10:30:39Z
/tmp/test:isDirectory false
/tmp/test:isOther false
/tmp/test:isRegularFile true
/tmp/test:isSymbolicLink false
/tmp/test:lastAccessTime 2012-08-12T10:33:09Z
/tmp/test:lastModifiedTime 2012-08-12T10:30:39Z
/tmp/test:size 5
DosFileAttributes:
/tmp/test:isArchive false
/tmp/test:isHidden false
/tmp/test:isReadOnly false
/tmp/test:isSystem false
PosixFileAttributes:
/tmp/test:group users
/tmp/test:owner auth.gabor
/tmp/test:permissions [GROUP_READ, OTHERS_READ, OWNER_WRITE, OWNER_READ]
AclFileAttributeView:
FileOwnerAttributeView:
/tmp/test:getOwner auth.gabor</pre>
</div>
</div>
<h2 id="NIO2-Változáskövetés">Változás követés</h2>
<p style="font-size: 13px">A fájlrendszerben történt változások figyelése fontos feladat, gondoljunk csak a kedvenc fejlesztőkörnyezetünkre, amely szeretne értesülni arról, hogy a háta mögött módosítunk egy állományt. A Java7 előtt erre különféle praktikákra volt szükség, de ez is a múlté... <img class="emoticon emoticon-smile" src="/s/en_GB/3284/7/_/images/icons/emoticons/smile.png" data-emoticon-name="smile" alt="(smile)" /></p>
<p style="font-size: 13px">Tegyük fel, hogy szeretnénk figyelni a /tmp/nio.2/ könyvtár tartalmában beálló módosulásokat:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: true" style="font-size:12px;; font-size: 13px">Path tmpDir = Paths.get("/tmp/nio.2/");
WatchService watcher = FileSystems.getDefault().newWatchService();
tmpDir.register(watcher,
StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY);
while (true)
{
WatchKey key = null;
try
{
key = watcher.take();
} catch (InterruptedException ex)
{
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
for (WatchEvent event : key.pollEvents())
{
System.out.println(event.context() + ": " + event.kind());
}
key.reset();
}</pre>
</div>
</div>
<p style="font-size: 13px">A fenti program szerkezete viszonylag egyszerű, megmondjuk, hogy mit szeretnénk figyelni, regisztráljuk a figyelő szolgáltatásba, majd egy <em>végtelen</em> ciklusban figyeljük az események bekövetkeztét. Próbáljuk ki:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size:12px;; font-size: 13px">> touch /tmp/nio.2/test
> rm /tmp/nio.2/test
> touch /tmp/nio.2/test2
> echo "abc" >/tmp/nio.2/test2
> rm /tmp/nio.2/test2</pre>
</div>
</div>
<p style="font-size: 13px">Ezzel egy időben az alábbit kell lássuk a programunk kimenetén:</p>
<div class="code panel" style="border-width: 1px;">
<div class="codeContent panelContent">
<pre class="theme: Default; brush: java; gutter: false" style="font-size:12px;; font-size: 13px">test: ENTRY_CREATE
test: ENTRY_MODIFY
test: ENTRY_DELETE
test2: ENTRY_CREATE
test2: ENTRY_MODIFY
test2: ENTRY_MODIFY
test2: ENTRY_DELETE</pre>
</div>
</div>
<p style="font-size: 13px">Úgy gondolom, hogy sok Java fejlesztő nem fogja használni a fenti megoldásokat, mivel ahhoz az kellene, hogy a Java platform desktop környezetben is terjedjen el, de jelenleg nem tudunk túl sok példát mondani multiplatformos programra.</p>
<hr />
<p style="font-size: 13px">
<style type="text/css">
.rater {
color: #949494;
font-size: 11px;
margin: 4px 4px;
overflow: auto;
}
.rater td {
vertical-align: middle;
padding-top: 6px;
}
.rater .images {
padding-top: 3px;
}
.rater .links {
cursor: pointer;
}
.rater .disabled a {
cursor: default;
}
.rater img {
height: 18px;
width: 15px;
}
.rater .wait img {
height: 18px;
width: 20px;
background: transparent url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/loading_mini.gif) no-repeat scroll center left;
}
.rater a img {
border-style: none;
}
.results.caption {
padding-left: 8px;
}
.rater .right-space {
padding-right: 8px;
}
/* sprites */
.rater img { background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; }
.rater a.out img { background-position: 0 -275px; }
.rater a.over img, .rater img.over { background-position: 0 -226px; }
.rater a.off img, .rater img.off { background-position: 0 -128px; }
.rater a.on img, .rater img.on { background-position: 0 -177px; }
.rater img.half { background-position: 0 -79px; }
</style> <img width="0px" height="0px" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/loading_mini.gif" /> <img width="0px" height="0px" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif" /> </p>
<!-- only output the .vote td's if they CAN vote, but have NOT yet voted -->
<!-- obviously change the URL's on the a tags to reflect the various choices -->
<!-- only output the .wait td's if they CAN vote, but haven't already voted -->
<!-- always output .results td's - the classes (on, half and off) depict the current avg. rating -->
<!--td> <a id="activatePlusone-27852934" href="#"
                onClick="gapi.plusone.render('plusone-div-27852934');document.getElementById('activatePlusone-27852934').style.display='none';">Activate the +1 button</a>
                <div id="plusone-div-27852934"></div>
        </td-->
<table class="rater ceoId-27852934" style="color: #949494; font-size: 11px; margin: 4px 4px; overflow: auto">
<tbody>
<tr>
<!-- only output the .vote td's if they CAN vote, but have NOT yet voted -->
<td class="vote caption" style="font-size: 13px; vertical-align: middle; padding-top: 6px">Your Rating:</td>
<td class="vote thanks" style="display:none;; font-size: 13px; vertical-align: middle; padding-top: 6px">Thanks for voting!</td>
<!-- obviously change the URL's on the a tags to reflect the various choices -->
<td class="vote links images right-space" style="font-size: 13px; vertical-align: middle; padding-top: 6px; padding-top: 3px; cursor: pointer; padding-right: 8px"> <a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=27852934&rating=1&redirect=true" alt="Pathetic" title="Pathetic" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a><a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=27852934&rating=2&redirect=true" alt="Bad" title="Bad" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a><a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=27852934&rating=3&redirect=true" alt="OK" title="OK" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a><a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=27852934&rating=4&redirect=true" alt="Good" title="Good" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a><a class="out" href="/plugins/rate/rating.action?decorator=none&displayFilter.includeCookies=true&displayFilter.includeUsers=true&ceoId=27852934&rating=5&redirect=true" alt="Outstanding!" title="Outstanding!" style="color: #326ca6; text-decoration: none"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" style="height: 18px; width: 15px; border-style: none; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -275px" /></a> </td>
<!-- only output the .wait td's if they CAN vote, but haven't already voted -->
<td class="wait images" style="display:none;; font-size: 13px; vertical-align: middle; padding-top: 6px; padding-top: 3px"><img src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Please Wait" title="Please Wait" style="height: 18px; width: 15px; height: 18px; width: 20px; background: transparent url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/loading_mini.gif) no-repeat scroll center left; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left" /></td>
<td class="wait text right-space" style="display:none;; font-size: 13px; vertical-align: middle; padding-top: 6px; padding-right: 8px">Please Wait</td>
<!-- always output .results td's - the classes (on, half and off) depict the current avg. rating -->
<td class="results caption border" style="font-size: 13px; vertical-align: middle; padding-top: 6px; padding-left: 8px">Results:</td>
<td class="results images" style="font-size: 13px; vertical-align: middle; padding-top: 6px; padding-top: 3px"> <img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Pathetic" title="Pathetic" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /><img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Bad" title="Bad" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /><img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="OK" title="OK" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /><img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Good" title="Good" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /><img class="off" src="/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/blank.gif" alt="Outstanding!" title="Outstanding!" style="height: 18px; width: 15px; background: url(/download/resources/com.adaptavist.confluence.rate:rate/resources/themes/v2/gfx/rater.gif) no-repeat top left; background-position: 0 -128px" /> </td>
<td class="results value" style="font-size: 13px; vertical-align: middle; padding-top: 6px">0</td>
<td class="results ratings" style="font-size: 13px; vertical-align: middle; padding-top: 6px">rates</td>
<!--td> <a id="activatePlusone-27852934" href="#"
                onClick="gapi.plusone.render('plusone-div-27852934');document.getElementById('activatePlusone-27852934').style.display='none';">Activate the +1 button</a>
                <div id="plusone-div-27852934"></div>
        </td-->
<td class="results" style="font-size: 13px; vertical-align: middle; padding-top: 6px"> </td>
<td style="font-size: 13px; vertical-align: middle; padding-top: 6px">
<g:plusone></g:plusone></td>
<td class="results" style="font-size: 13px; vertical-align: middle; padding-top: 6px"> </td>
<td style="font-size: 13px; vertical-align: middle; padding-top: 6px">
<div class="fb-like" data-send="true" data-layout="button_count" data-width="450" data-show-faces="true"></div></td>
</tr>
</tbody>
</table>
<p style="font-size: 13px"></p>
<p style="font-size: 13px"> </p>
<div class="bv_viewtracker">
<span class="bv_viewracker_span bv_viewtracker_closed"> Page viewed 1 times by 1 users since Aug 12, 2012 </span>
</div>
<div class="bv_viewtracker_visits" style="display:none;">
<table class="bv_viewtracker_table tableview attachments">
<tbody>
<tr class="bv_viewtracker_header">
<th class="bv_viewtracker_header_name" style="font-size: 13px; border-bottom: 1px solid #69c; font-weight: bold; text-align: left">Name</th>
<th class="bv_viewtracker_header_lastviewed" style="font-size: 13px; border-bottom: 1px solid #69c; font-weight: bold; text-align: left">Last viewed</th>
<th class="bv_viewtracker_header_timesviewed" style="font-size: 13px; border-bottom: 1px solid #69c; font-weight: bold; text-align: left">Times viewed</th>
</tr>
<tr class="bv_viewtracker_body">
<td class="bv_viewtracker_body_name" style="font-size: 13px; border-bottom: 1px solid #bbb; text-align: left; padding: 4px 16px 4px 0"> <a href="/display/~javalist" class="url fn confluence-userlink" data-username="javalist" style="color: #326ca6; text-decoration: none">Javaforum List</a><br /> </td>
<td class="bv_viewtracker_body_lastviewed" style="font-size: 13px; border-bottom: 1px solid #bbb; text-align: left; padding: 4px 16px 4px 0">Aug 12, 2012 13:38</td>
<td class="bv_viewtracker_body_timesviewed" style="font-size: 13px; border-bottom: 1px solid #bbb; text-align: left; padding: 4px 16px 4px 0">1</td>
</tr>
</tbody>
</table>
</div>
<p style="font-size: 13px"></p>
<p style="font-size: 13px"> </p>
</div>
</div>
<table id="email-actions" class="email-metadata" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; color: #505050">
<tbody>
<tr>
<td class="left" valign="top" style="font-size: 13px; padding-top: 8px; max-width: 45%; text-align: left"> <span class="email-list-item"><a href="http://wiki.javaforum.hu/display/JAVAFORUM/2012/08/12/NIO.2" style="color: #326ca6; text-decoration: none">View Online</a> </span> </td>
<td class="right" width="50%" valign="top" style="font-size: 13px; padding-top: 8px; text-align: right"> <span class="email-list-item"><a href="http://wiki.javaforum.hu/users/editmyemailsettings.action" style="color: #326ca6; text-decoration: none">Manage Notifications</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="http://wiki.javaforum.hu/users/viewmyemailsettings.action" style="color: #326ca6; text-decoration: none">Unsubscribe from all blog posts</a> </span> </td>
</tr>
</tbody>
</table> </td>
</tr>
</tbody>
</table></td>
</tr>
<tr>
<td id="email-footer" align="center" style="font-size: 13px; padding: 0 16px 32px 16px; margin: 0"> <small style="font-size: 11px"> This message was sent by <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence">Atlassian Confluence</a> 4.2.5, the <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence/tour/enterprise-wiki.jsp">Enterprise Wiki</a> </small> </td>
</tr>
</tbody>
</table>
</body>
</html>