/* FileWriter.java * * Copyright (c) 2005-2011 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com> * Distributed under GNU Public License. */ package wikokit.base.wikipedia.util; import java.io.*; public class FileWriter { //public static Encodings encodings; private OutputStreamWriter osw; private boolean b_append; private String encode; private String dir; //String dir = new String("data/graphviz/"); private String filename; private String path; public FileWriter() { //encodings = new Encodings(); encode = "UTF8"; // default value } public void SetDir (String new_dir) { dir = new_dir; } public void SetFilename (String new_filename) { filename = new_filename; path = dir + filename; } /*public void SetFilenameLatinitsa (String new_filename) { filename = StringUtilRegular.encodeRussianToLatinitsa(new_filename); path = dir + filename; }*/ public String GetFilename () { return filename; } public String GetPath () { return path; } public String GetDir () { return dir; } /* public void SetFilenameUTF8 (String new_filename) { filename = new String(encodings.Latin1ToUTF8(new_filename)); path = dir + filename; }*/ public void SetAppend (boolean b_new_append) { b_append = b_new_append; } public void SetEncode (String new_encode) { encode = new_encode; } public void Open() { Open(b_append, encode); } /** Opens file stream. * @param b_append if <code>true</code>, then bytes will be written * to the end of the file rather than the beginning */ public void Open(boolean b_append, String encode) { this.b_append = b_append; this.encode = encode; try { osw = new OutputStreamWriter(new FileOutputStream(path, b_append),encode); } catch (Exception e) { System.out.println("Problem serializing: " + e); } } public void delete() { File f = new File(path); f.delete(); } public void Print(String text) { try { if(null != osw) { osw.write(text);} } catch (Exception e) { System.out.println("Problem serializing: " + e); } } public void PrintNL(String text) { Print(text + "\n"); } public void Flush() { try { if(null != osw) { osw.flush(); } } catch (Exception e) { System.out.println("Problem serializing: " + e); } } /** Get filename without the extension */ public String GetFilenameWoExt() { for(int i=filename.length()-1; i>=0; i--) { if('.' == filename.charAt(i)) { return new String(filename.substring(0, i)); } } return filename; } public long GetFileLength() { try { RandomAccessFile raf = new RandomAccessFile(path, "r"); return raf.length(); } catch (IOException e) { System.out.println("Error opening file: " + path); } return 0; } /** Opens file stream in /user home directory/.synarcher/sub_dir/_filename * in encoding enc. * @param b_append if <code>true</code>, then bytes will be written * to the end of the file rather than the beginning * Examples * dump.file_dot.setFileInHomeDir("graphviz", "bat_ruwiki.dot", "Cp866",true); * dump.file_bat.setFileInHomeDir("graphviz", "bat_ruwiki.bat", "Cp866",true); * dump.file_sh.setFileInHomeDir("graphviz", "bat_ruwiki.sh", "Cp1251", true); */ public void setFileInHomeDir(String sub_dir, String _filename,String enc,boolean b_append) { String fs = System.getProperty("file.separator"); dir = System.getProperty("user.home") + fs + ".synarcher" + fs + sub_dir + fs; SetFilename(_filename); Open(b_append, enc); } /** Checks file existance. */ public static boolean existsFile (String path) { File _file = new File(path); if (_file != null) return _file.exists(); return false; } /** Creates parent directory for the file with the full 'path', * if the directory does not exist. */ public static void createDir(String path) { File _file = new File(path); if (_file != null) { if (_file.exists()) { // File already exists, check write access if (!_file.canWrite()) { System.out.println("File is not writeable: " + _file.getPath()); } } else { // File does not yet exist, try to create it File parentDir = _file.getParentFile(); if (parentDir != null && !parentDir.exists()) { boolean created = parentDir.mkdirs(); if (!created) System.out.println("FileWriter::createDir Unable to create directory for file " + _file.getPath()); } } } } /** Extracts file with name resource_name from the jar, * copies it to the target directory target_dir. * * @param target_dir target directory, if it is not exists, then mkdir, * e.g. creates `.wiwordik` folder for the * target_dir=".../.wiwordik/enwikt20101030.sqlite" * * @see http://www.java2s.com/Code/Java/File-Input-Output/RetreiveTextFileFromJar.htm */ public static boolean retrieveBinaryFileFromJar(String resource_name, String target_dir,Object resource) throws Exception { boolean found=false; if(resource_name != null) { FileWriter.createDir(target_dir + File.separator + "test file"); ClassLoader cl = resource.getClass().getClassLoader(); InputStream is = cl.getResourceAsStream(resource_name); if(is == null) throw new Exception ("Error in FileWriter::retrieveBinaryFileFromJarResource "+resource_name+" was not found."); BufferedReader br = new BufferedReader(new InputStreamReader(is)); //FileOutputStream fos = new FileOutputStream(target_dir+File.separator + // resource_name.substring(resource_name.lastIndexOf('/'), resource_name.length())); FileOutputStream fos = new FileOutputStream(target_dir+File.separator + resource_name); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } fos.flush(); br.close(); is.close(); found=true; } else { found=false; } return found; } /* OOOOOOOOOOO LLLLLLLLLLLLLL DDDDDDDD */ /* public void Write(String filename, String text, boolean b_append, String encode) { try { osw = new OutputStreamWriter(new FileOutputStream(filename, b_append),encode); osw.write(text); osw.flush(); } catch (Exception e) { System.out.println("Problem serializing: " + e); } } public void WriteNew(String filename, String text, String encode) { Write(filename, text, false, encode); } public void Append(String filename, String text, String encode) { Write(filename, text, true, encode); } */ }