Cargando

JSP ejecutar Java




10 Respuestas de expertos
Pulsa corazón para recibir avisos de nuevas Respuestas

  AUTOR PREGUNTA

Publicado 30 marzo 2014 - 21:05
Buenas noches,

Desde 1 fichero JSP hago:

<%Process p=Runtime.getRuntime().exec("javac directorio\\hello.java"); %>

En Java también me funciona.

Lo que no consigo es hacer esto:
java Hello > hola.txt

class hello{
public static void main(String[] args){
System.out.println("Hello. :-)");
}
}

No quiero poner este comando (java ...) en 1 fichero BAT, aunque tampoco me funciona en JSP (sí en Java). El fichero Java (en catalán) es éste:

import java.io.File;
class fitxer{
public static void main(String[] args){
try{
File fitxer=new File("./test.1x2");

Gracias anticipadas,


PepBR
if (!fitxer.exists()){
	 System.out.println("Creant-se el fitxer...");
	 fitxer.createNewFile();
	 System.out.println("Fitxer creat.");
}else{
	 fitxer.delete();
	 fitxer.createNewFile();
	 System.out.println("Fitxer eliminat i creat de nou.");
}
}catch(Exception e){
}
}
}

Gracias anticipadas,


PepBR
  • ¿Tienes la misma pregunta? Yo también
  • Volver arriba

Publicado 31 marzo 2014 - 01:23
Ok, dejame ver si te seguí, creo que lo que quieres hacer es utilizar la salida por consola de un programa java para llenar un archivo .txt no? Sí es así, debes hacerlo de la siguiente manera, usando el nombre de la clase, avísame como te va:

javac miArchivo.java
java NombreClase> hola.txt


   AUTOR PREGUNTA

Publicado 31 marzo 2014 - 09:21

Ok, dejame ver si te seguí, creo que lo que quieres hacer es utilizar la salida por consola de un programa java para llenar un archivo .txt no? Sí es así, debes hacerlo de la siguiente manera, usando el nombre de la clase, avísame como te va:

javac miArchivo.java
java NombreClase> hola.txt


Lo que quiero es exactamente esto, pero no por consola, sí por JSP (y que el fichero TXT no salga vacío. En realidad quiero hacer esto:

java JLex.Main linies.lex
javac linies.lex.java
java linies in0.1x2

En resumen, que el comportamiento del JSP sea el de la consola MS-DOS. Por esto decía ayer que ya hago correctamente:

javac directorio\\hello.java
javac directorio\\fitxer.java

en JSP, que al hacer:

java fitxer > fitxer.txt

tendría que crear los ficheros:
- fitxer.txt (con contenido)
- test.1x2 (vacío)


PepBR

Publicado 31 marzo 2014 - 16:02
Yo creo que estás mezclando un poco los conceptos, ya que JSP corre bajo un servidor web, por ejemplo Tomcat. Entonces sabiendo esto puedes usar el objeto PrintWriter para hacer lo que necesitas, te dejo un ejemplo, cualquier cosa me comentas:

<%@ page import="java.io.*"  %>
<%
String str = "contenido del archivo txt";
String nameOfTextFile = "/usr/anil/fitxer.txt";
try {  
    PrintWriter pw = new PrintWriter(new FileOutputStream(fitxer));
    pw.println(str);
    pw.close();
} catch(IOException e) {
   out.println(e.getMessage());
}
%>


   AUTOR PREGUNTA

Publicado 01 abril 2014 - 12:46
Mi servidor es JBoss.

Imagina 1 fichero Java (fichero.java) que hace lo siguiente:
1. Si fichero Prueba.txt no existe en c:\, crearlo y decir:
Fichero Prueba.txt recientemente creado.
2. Si no, decir:
Fichero Prueba.txt ya existe.

Ahora tenemos otro fichero Java (comandos.java) que me hace OK esto:
javac fichero.java
(Process process = Runtime.getRuntime().exec("javac fichero.java"); )

Me falla (no lo consigo) que comandos.java haga OK la ejecución:
java fichero > salida.txt
creándose Prueba.txt si no existía y salida.txt (con contenido).

Si funciona en Java también tiene que funcionar en JSP (de tu código se queja en el parámetro 'fitxer', y mejor si el contenido fuese línea a línea (metido en 1 textarea :-P)),


PepBR

Publicado 02 abril 2014 - 14:19
Como te mencionaba anteriormente estás mezclando los conceptos, independientemente que tu servidor sea JBoss, Tomcat o Geronimo son servidores de aplicaciones de Java por igual, debes ejecutar el código entre las directivas de JSP, es decir, ese proceso que quieres hacer debe ir en código y no mediante comandos, en cuanto al código vamos a tratar de separar un poco más los pasos, por ejemplo crea la instancia a FileOutputStream() fuera de PrintWriter, entonces agrega lo siguiente antes de PrintWriter:

archivo = new File("c:/archivo.txt");
fop = new FileOutputStream(archivo);

Entonces en el código que te pase también cambia esta línea:

PrintWriter pw = new PrintWriter(fop);

Con esto ya debería funcionarte, de igual manera si te da problemas vuelves.

Saludos.

   AUTOR PREGUNTA

Publicado 02 abril 2014 - 15:05
Lo que me dices es esto:

JSP --> archivo.txt --> JSP (contenido del fichero TXT)

Lo que quiero hacer es:

JSP --> (comandos.java --> fichero.java) --> JSP (creación de 2 ficheros)

Lo que te pongo entre paréntesis es para ejecutarlo bajo MS-DOS. El fitxer.txt se crea una vez hecho:
java fitxer > fitxer.txt
Si comandos.java lo hace OK (compilar ya lo hago OK) también lo hará JSP.

Tanto en Java como en JSP es el método Runtime().exec(comando), pero me falla la ejecución (java fitxer > fitxer.txt). En tu código sólo aparece archivo.txt o fitxer.txt, y ningún fichero Java ni Runtime,


PepBR

Publicado 02 abril 2014 - 18:16
Ok dejame ver si te segui, esto es lo que quieres:

[color=#282828][font=helvetica, arial, sans-serif]JSP --> archivo.txt --> JSP (contenido del fichero TXT)[/font][/color]

Entonces agrega el runtime dentro del JSP y en vez de apuntar al fichero java, el parámetro del .exec debe ser la clase que hace todas las operaciones para crearte los .txt. Pruebalo entonces así:

[color=#1A1A1A][font=Lucida Sans Unicode', 'Lucida Sans', 'Lucida Grande', Malayalam, Verdana, sans-serif][size=3]
Runtime.getRuntime().exec("java miClase");
[/size][/font][/color]
[size=4][color=#1A1A1A]Me avisas[/color][/size]

   AUTOR PREGUNTA

Publicado 02 abril 2014 - 20:24
¡Conseguido! :-)

Lo había probado hace días (y versiones) con:
/K
pero no con /C (fuente:

Por favor Identificate o Registrate para poder ver este contenido

). Más enlaces:
-

Por favor Identificate o Registrate para poder ver este contenido


-

Por favor Identificate o Registrate para poder ver este contenido


-

Por favor Identificate o Registrate para poder ver este contenido


-

Por favor Identificate o Registrate para poder ver este contenido

(jacosta: tu anterior post (probado))

import java.io.*;
public class comprun {
public static void main(String[] args) {
try {
	 Process process1 = Runtime.getRuntime().exec("javac fitxer.java");
	 Process process2 = Runtime.getRuntime().exec("cmd /C java fitxer > run.txt");
} catch (Exception e) {
	 e.printStackTrace();
}
}
}

El fichero run.txt aparece con 1 o 2 líneas de contenido (ver el primer post). El fichero test.1x2 se crea si no existe. :-) Con 'cmd.exe' también funciona.

jacosta: Gracias, pero como ves:
1. Redireccionaba la salida a 1 fichero TXT.
2. Me faltaba empezar el comando "cmd /C" (desde el viernes una de las muchas pruebas era con '/K', '\\K',...).
3. Ya probé lo de tu respuesta anterior, pero sin crearse el fichero TXT (sí el fichero '1x2').

Gracias de nuevo, jacosta,


PepBR

Publicado 02 abril 2014 - 22:43
Tranquilo para eso estamos ;)


X