All pastes #39779 Raw Edit

Anonymous

public text v1 · immutable
#39779 ·published 2006-02-03 17:21 UTC
rendered paste body
//Please don't sue me if the following code causes your pc to crash

import java.io.*;
import java.lang.*; 
import java.util.*;

class pngConvert
{
	//Set (iweb) root directory 
	String rootDir = "testmappe/";

	//Don't touch these
	ArrayList pngFiles = new ArrayList();
	ArrayList htmlFiles = new ArrayList(); //and js, they are used the same way	
	ArrayList fileExceptions = new ArrayList();
	String launchCommand[] = new String[4];
	long lengthBefore = 0;
	long lengthAfter = 0;
	
	//CONSTRUCTOR, MAIN LOGIC
	public pngConvert()
	{
		//Use this command for convertion
		launchCommand[0] = "open";
		launchCommand[1] = "-a";
		launchCommand[2] = "jpeg.exe"; //jpeg.exe is an imageready droplet
	
		//Set file exceptions (do not convert any of these files). Some of them need the transparency provided with png
		fileExceptions.add("navbar"); //exclude all images that has "navbar" in its filename
		fileExceptions.add("shapeimage");
		fileExceptions.add("home_image");
		fileExceptions.add("IMG_4655.png");
		fileExceptions.add("Billede 020_1.png");
	
		//Look for .png, .html and .js. Set arraylists pngFiles and htmlFiles
		System.out.println("Searching...");
		findFiles(rootDir); 
	
		//Remove files from pngFiles (based on fileExceptions)
		filterPngFiles();
		
		//Replace image paths in html and js files (ex. files/bg.png -> files/bg.jpg)
		replacePaths();
		
		//Rename files that contains spaces (replace with ___)
		renamePngFiles();
		
		//Convert all png files in pngFiles by executing launchCommand (with png file as param)
		System.out.println("Converting...");
		convertPngFiles();
	
		//Wait for user confirmation (Bad idea to delete files if the proces hasn't finished)
		System.out.println("Press enter when done... (done is the keyword here)");
		userConfirm();
	
		//Delete original png files
		deletePngFiles();
		
		System.out.println("\n\n\n\n\n");
		System.out.println("Well done...");
		System.out.println("Size before: " + (lengthBefore/1000) + " kb");
		System.out.println("Size after: " + (lengthAfter/1000) + " kb");
		System.out.println("\n\n\n\n\n");
	}
	
	//Search for png, html and js files in a given directory (website root)
	//Method is recursive
	void findFiles(String dir)
	{
		File file = new File (dir);
    	File[] files = file.listFiles();
    	
    	//Go though all files in dir
    	for(int i=0; i < files.length; i++)
    	{
    		//If its a directory, then call itself
    		if (files[i].isDirectory())
    		{
    			findFiles(files[i].toString());
    		}
    		else //Determine if the file is important (png, html, js)
    		{	
    			if (files[i].toString().endsWith(".png"))
    			{
    				pngFiles.add(files[i].toString());
    			}
    			else if (files[i].toString().endsWith(".html") || files[i].toString().endsWith(".js"))
    			{
    				htmlFiles.add(files[i].toString());
    			}
    		}
    	} //end loop
	} //end function
	
	//Remove png files from pngFiles list (fileExceptions)
	void filterPngFiles()
	{	
		//Go though all file exceptions
		for(int i=0; i < fileExceptions.size(); i++)
		{
			for(int c=0; c < pngFiles.size(); c++)
			{
				String name = pngFiles.get(c).toString(); //Current png file
				String ex = fileExceptions.get(i).toString(); //String to match
								
				if (name.indexOf(ex) > 0)
				{
					pngFiles.remove(pngFiles.get(c).toString());
					c--; //took a while to figure out :-)
				}
			}
		}
	}
	
	//Replace paths (make all(most) image paths end with jpg instead of png)
	void replacePaths()
	{
		//Go though all html files one by one
		for(int i=0; i < htmlFiles.size(); i++)
		{
			//Get file content
			String fileContent = getFileContent(htmlFiles.get(i).toString());		
		 
			for(int c=0; c < pngFiles.size(); c++)
			{
				//Split current png filename (only the last part is used, not the whole path)
				String[] split = pngFiles.get(c).toString().split("/");
				String oldFilename = split[split.length-1];
				
				//Be aware of spaces (%20 in html files)
				oldFilename = oldFilename.replaceAll(" ", "%20"); //This is the string to replace
				
				//Remove png and add jpg
				String newFilename = oldFilename.substring(0, oldFilename.length()-3) + "jpg";
				if (newFilename.length() > 30) newFilename = "_"+newFilename.substring(newFilename.length()-15,newFilename.length()); //imageready has a thing with filenames too big
			
				newFilename = newFilename.replaceAll("%20", "__"); //future filnames have _'s instead of spaces, otherwise imageready screws it up
				
				//Replace (finally)
				fileContent = fileContent.replaceAll("/"+oldFilename, "/"+newFilename);							
			}
			
			//Writ new and replaced content to file
			writeFileContent(htmlFiles.get(i).toString(), fileContent);
			
		} //end loop
	}
	
	//Used by method above, returns content of a given file as a string
	String getFileContent(String filename)
	{
		String returnContent = "";
		try
		{
			FileReader file = new FileReader(filename);
			BufferedReader in = new BufferedReader(file);
			
			//Line by line
			String line = in.readLine();
			while (line != null)
			{
				returnContent += line + "\n";
				line = in.readLine();
			}
		}
		catch (Exception e)
		{
			System.out.println("Holy moly, something went wrong (read)...");
		}
		
		return returnContent;
	} //End function
	
	void writeFileContent(String filename, String content)
	{
		try
		{
			FileWriter file = new FileWriter(filename);
			file.write(content);
			file.close();
		}
		catch (IOException e)
		{
			System.out.println("Holy moly, something went wrong (write)...");
		}
	}
	
	//Rename files that contain spaces 
	void renamePngFiles()
	{
		for(int i=0; i < pngFiles.size(); i++)
		{	
			//imageready has a thing with filenames too big
			String newFilename = pngFiles.get(i).toString();
			String[] split = newFilename.split("/");
			String fn = split[split.length-1];
			if (fn.length() > 30) fn = "_"+fn.substring(fn.length()-15,fn.length()); 		
			fn = fn.replaceAll(" ", "__");
			fn = newFilename.substring(0, newFilename.indexOf(split[split.length-1])) + fn;				
			
			//Rename
			(new File(pngFiles.get(i).toString())).renameTo(new File(fn));
		
			//Update pngFiles
			pngFiles.set(i, fn);
		}
	}
	
	void convertPngFiles()
	{	
		Process a; 
		for(int i=0; i < pngFiles.size(); i++)
		{	
			String filename = pngFiles.get(i).toString();
			
			//Execute
			try
			{
				launchCommand[3] = filename;				
				a = Runtime.getRuntime().exec(launchCommand);	
				a.waitFor();
			}			
			catch(Exception e)
			{
				//oh crap
    			System.out.println("Holy moly, something went wrong (converting)...");
    			e.printStackTrace();
			}
		}
	}
	
	void userConfirm()
	{
		//wait for user confirmation
		BufferedReader waitForInput = new BufferedReader(new InputStreamReader(System.in));
		try 
		{ 
			waitForInput.readLine(); 
		} 
		catch (IOException ioe) 
		{ 
			System.out.println("Holy cow, something went completely wrong"); 
		}
	}
	
	void deletePngFiles()
	{
		for(int i=0; i < pngFiles.size(); i++)
		{
			String filename = pngFiles.get(i).toString();
		
			//Get old filesize
			File f = new File(filename);
			lengthBefore += f.length();
			
			//delete png
			f.delete();
			
			//Get new filesize
			String jpgFile = filename.substring(0, filename.length()-3) + "jpg";
			File ff = new File(jpgFile);
			lengthAfter += ff.length();
		}
	}
} //End class

public class converter
{
	public static void main(String[] args)
	{
		pngConvert png = new pngConvert();
	}
}