/*
* HalfNES by Andrew Hoffman
* Licensed under the GNU GPL Version 3. See LICENSE file
*/
package com.grapeshot.halfnes;
import java.awt.EventQueue;
import java.io.*;
/**
*
* @author Andrew
*/
public class FileUtils {
private FileUtils() {}
public static String getExtension(final File f) {
return getExtension(f.getName());
}
public static String getExtension(final String s) {
if (s == null || s.equals("")) {
return "";
}
int split = s.lastIndexOf('.');
if (split < 0) {
return "";
}
return s.substring(split);
}
public static String stripExtension(final File f) {
String s = f.getName();
if (s == null || s.equals("")) {
return "";
}
int split = s.lastIndexOf('.');
if (split < 0) {
return "";
}
return s.substring(0, split);
}
public static String stripExtension(final String s) {
if (s == null || s.equals("")) {
return "";
}
int split = s.lastIndexOf('.');
if (split < 0) {
return "";
}
return s.substring(0, split);
}
public static void writetofile(final int[] array, final String path) {
//note: does NOT write the ints directly to the file - only the low bytes.
AsyncWriter writer = new AsyncWriter(array, path);
writer.run();
}
public static void asyncwritetofile(final int[] array, final String path) {
//now does the file writing in the dispatch thread
//hopefully that will eliminate annoying hitches when file system's slow
//and not do pathological stuff like threads are prone to
AsyncWriter writer = new AsyncWriter(array, path);
EventQueue.invokeLater(writer);
}
private static class AsyncWriter implements Runnable {
private final int[] a;
private final String path;
public AsyncWriter(final int[] a, final String path) {
this.a = a;
this.path = path;
}
@Override
public void run() {
if (a != null && path != null) {
try {
FileOutputStream b = new FileOutputStream(path);
byte[] buf = new byte[a.length];
for (int i = 0; i < a.length; ++i) {
buf[i] = (byte) (a[i] & 0xff);
}
b.write(buf);
b.flush();
b.close();
} catch (IOException e) {
System.err.print("Could not save. ");
System.err.println(e);
}
}
}
}
public static String getFilenamefromPath(String path) {
return new File(path).getName();
}
public static int[] readfromfile(final String path) {
File f = new File(path);
byte[] bytes = new byte[(int) f.length()];
FileInputStream fis;
try {
fis = new FileInputStream(f);
fis.read(bytes);
} catch (IOException e) {
// TODO Auto-generated catch block
System.err.println("Failed to load file");
e.printStackTrace();
}
int[] ints = new int[bytes.length];
for (int i = 0;
i < bytes.length;
i++) {
ints[i] = (short) (bytes[i] & 0xFF);
}
return ints;
}
public static boolean exists(final String path) {
File f = new File(path);
return f.canRead() && !f.isDirectory();
}
}