Java - ¿Cómo puedo hacer para crear un archivo .dat?

 
Vista:

¿Cómo puedo hacer para crear un archivo .dat?

Publicado por el fisico (9 intervenciones) el 30/01/2009 19:38:00
Ayuda a tos los expertos en Java.

Soy panameño, formado en física, y estoy aprendiendo por mi cuenta en aprender Java, para ello estoy utilizando el libro COMO PROGRAMAR EN JAVA 7ma edición de Dietel-Dietel. Bien hasta el momento he avanzado satisfactoriamente. Resulta que me he "estancado" en el tema de creación de archivos. Explico.

Estoy interesado en generar un archivo con extensión .dat para reproducir el comportamiento gráfico de algunas funciones matemáticas. El código fuente que te anexo a continuación fue generado con el software NetBeans IDE 6.5 con el Java 1.6.0. El mismo como podrá verificar es ejecutado a satisfacción, pero lamentablemente no me crea el archivo "BESSEL.DAT" que deseo utilizar posteriormente. El código fuente me crea el archivo en el lugar indicado, pero me dice que el mismo posee 0 kb de tamaño. No he sido capaz de averiguar que es lo que ha estado ocurriendo; tengo más de una semana con este problema y nada.

Agradezco de antemano cualquier ayuda que me puedan brindar para superar esta situación.

El código fuente es el siguiente:

package ejemplosfisica229a;

// Paquetes Java.
import java.io.*;

public class ejemplo30 {
// Declaración de las variables a utilizar.
private int x0, // argumento de la funciones de Bessel.
n; // índice de la función de Bessel.
private double[][] suma0 = new double[200][200];
private double[][] bessel = new double[200][200];
private double[][] coef0 = new double[200][200];

public static void main(String[] args) {
ejemplo30 fisica229a = new ejemplo30();
fisica229a.init();
} // Final de la clase main.

public void init() {

try {
// Crea archivo de salida .dat.
FileWriter archivo = new FileWriter("bessel.dat");
BufferedWriter bw = new BufferedWriter(archivo);
PrintWriter salida = new PrintWriter(bw);
bw = new BufferedWriter(new FileWriter("bessel.dat", true));
salida = new PrintWriter(bw);

// Realización de los cálculos

for(n = 0; n < 5; n++) {
for(x0 = 0; x0 <= 15; x0++) {
coef0[n][x0] = Math.pow(x0, n);
suma0[n][x0] = sumatorio(n, x0);
bessel[n][x0] = coef0[n][x0] * suma0[n][x0];
}
}

// Muestra los resultados obtenidos.

System.out.println("x J_0(x) J_1(x) J_2(x) J_3(x) " +
"J_4(x) ");

for(x0 = 0; x0 <= 15; x0++) {
System.out.printf("%.2f %.5f %.5f %.5f %.5f %.5f ",
(double)x0, bessel[0][x0], bessel[1][x0], bessel[2][x0],
bessel[3][x0], bessel[4][x0]);

salida.printf("%.2f %.5f %.5f %.5f %.5f %.5f ", (double)x0,
bessel[0][x0], bessel[1][x0], bessel[2][x0], bessel[3][x0],
bessel[4][x0]);
}
System.out.println("He terminado de crear el archivo.");
System.exit(0); // finaliza aplicación
salida.close();
}
catch(java.io.IOException ioex) {
}
} // cierre de la clase init.

/* **********************************
* **** Creación de los métodos. ****
* ********************************** */

public double gammln(double xx) {
int m = 5, j;
double x, y, tpm, ser, coef[], factor;

coef = new double[6]; // Crea el espacio para el arreglo.

coef[0] = 76.18009172947146;
coef[1] = -86.50532032941677;
coef[2] = 24.01409825083091;
coef[3] = -1.231739575450155;
coef[4] = 0.1208650973866179E-02;
coef[5] = -0.5395239384953E-05;

y = x = xx;
tpm = x + 5.5;
tpm -= (x + 0.50) * Math.log(tpm);
ser = 1.000000000190015;

for(j = 0; j <= m; j++)
ser += coef[j]/++y;
factor = -tpm + Math.log(2.5066282746310005 * ser/x);
return factor;
} // Final del método gammln.

// ************************************

public double factrl(int n) {
int ntop = 4, j;
double a[] = {1.0, 1.0, 2.0, 6.0, 24.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

if(n < 0) {
System.out.println("Número inválido. El programa será abortado.");
System.exit(1); // Aborta la ejecución del método.
}
else if(n > 32) {
return Math.exp(gammln((double)n + 1.0)); // Llama al método gammln.
} // Cierre del ciclo if-else

while(ntop < n) {
j = ntop++;
a[ntop] = a[j] * (double)ntop;
} // Cierre del ciclo while.
return a[n];
} // Cierre del método factrl.

// ***************************************************************

double sumatorio(int n, double x) {
int k;
double suma = 0.0, coef1, coef2;

for(k = 0; k <= 100; k++){
coef1 = Math.pow(-1.0, k) * Math.pow(x, 2 * k);
coef2 = Math.pow(2.0, 2 * k + n) * factrl(k) * factrl(n + k);
suma += coef1/coef2;
} // cierre del ciclo for
return suma;
} // cierre del método sumatorio.
} // cierre de la clase ejemplo30
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE: ¿Cómo puedo hacer para crear un archivo .dat?

Publicado por Tom (1831 intervenciones) el 31/01/2009 10:54:25
Tu problema es que cierras el programa con exit(0) (cosa que te sobra) antes de cerrar el fichero con close(), con lo que consigues que no escriba nada en él, ya que le has asociado un BufferedWriter al que nunca llegas a hacer flush();

Te sobran estas líneas:
...
/*
bw = new BufferedWriter(new FileWriter("bessel.dat", true));
salida = new PrintWriter(bw);
*/
...

//System.exit(0); // finaliza aplicación
salida.close();
bw.close();
archivo.close();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: ¿Cómo puedo hacer para crear un archivo .dat?

Publicado por el fisico (9 intervenciones) el 04/02/2009 21:44:38
Muchas gracias por la corrección. Lo tendré presente para no cometer este error "infantil".

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar