2012-07-16 25 views
41

Estoy tratando de entender PrintWriter para un pequeño programa que estoy haciendo, y parece que no puedo obtener Java para hacer el archivo y luego escribir sobre él. Cuando ejecuto el programa a continuación, me da un error Filenotfoundexeption en la línea 9. También falla al hacer el archivo en el directorio que especifiqué. Soy nuevo en esto, por favor intente y mantenga las respuestas simples. Estoy usando Eclipse.¿Cómo usar las clases PrintWriter y File en Java?

import java.io.PrintWriter; 
import java.io.File; 

public class Testing { 

    public static void main(String[] args) { 

    File file = new File ("C:/Users/Me/Desktop/directory/file.txt"); 
    PrintWriter printWriter = new PrintWriter ("file.txt"); 
    printWriter.println ("hello"); 
    printWriter.close();  
    } 
} 
+0

Puede usar file.createNewFile(); para crear el archivo y pasar el objeto de archivo a PW .. –

Respuesta

63

Si no existe el directorio que necesita para crearlo. Java no lo creará solo, ya que la clase File es solo un enlace a una entidad que tampoco puede existir.

Como ha indicado, el error es que no se puede crear el archivo. Si usted lee la documentación de PrintStream constructor se puede ver

FileNotFoundException - If the given string does not denote an existing, writable regular file and a new regular file of that name cannot be created, or if some other error occurs while opening or creating the file

usted debe tratar de crear una ruta de la carpeta que contiene antes:

File file = new File("C:/Users/Me/Desktop/directory/file.txt"); 
file.getParentFile().mkdirs(); 

PrintWriter printWriter = new PrintWriter(file); 
+1

gracias, eso es exactamente lo que necesitaba! – SPARK

+14

+1 Para 'file.getParentFile(). Mkdirs()' :) –

+0

Supongamos que daré 'File file = new File (" dir1/dir2/directory/file.txt ");' ¿entonces dónde creará el directorio? dentro de la aplicación o fuera? –

4

pasar el objeto del archivo al constructor PrintWriter(File file):

PrintWriter printWriter = new PrintWriter(file); 
1
import java.io.File; 
import java.io.PrintWriter; 

public class Testing 
{ 
    public static void main(String[] args) 
    { 

     File file = new File("C:/Users/Me/Desktop/directory/file.txt"); 

     PrintWriter printWriter = null; 

     try 
     { 
      printWriter = new PrintWriter(file); 
      printWriter.println("hello"); 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      if (printWriter != null) 
      { 
       printWriter.close(); 
      } 
     } 
    } 
} 
+1

Esto arrojará NPE si se lanza 'FileNotFoundException'. Deberías usar 'if (printWriter! = Null) printWriter.close();' –

7
import java.io.PrintWriter; 
import java.io.File; 

public class Testing { 

    public static void main(String[] args) throws IOException { 

    File file = new File ("C:/Users/Me/Desktop/directory/file.txt"); 
    PrintWriter printWriter = new PrintWriter ("file.txt"); 
    printWriter.println ("hello"); 
    printWriter.close();  
    } 
} 

lanzar una excepción para el archivo .

0

Java normalmente no aceptar "/" para utilizar en la definición de un directorio de archivos, a fin de tratar esto:

File file = new File ("C:\\Users\\user\\workspace\\FileTester\\myFile.txt"); 

Si no existe el archivo hacer:

try { 
     file.createNewFile(); 
} 
catch (IOException e) { 
e.printStackTrace(); 
} 

necesita ningún Ayuda de Java, solo ven a mí.

0

Bueno, creo que en primer lugar, mantener a toda principal al intento de captura (o se puede utilizar como public static void main(String arg[]) throws IOException) y luego también utilizar la ruta completa del archivo en el que está escribiendo como

PrintWriter printWriter = new PrintWriter ("C:/Users/Me/Desktop/directory/file.txt"); 

todos esos directies como usuarios, Me, escritorio, directorio debe ser usuario realizó. java no hará directorios son dueños de su propio. se hiciese lo que

import java.io.*; 
public class PrintWriterClass { 

public static void main(String arg[]) throws IOException{ 
    PrintWriter pw = new PrintWriter("C:/Users/Me/Desktop/directory/file.txt"); 
    pw.println("hiiiiiii"); 
    pw.close(); 
} 

} 
0
import java.io.*; 

public class test{ 
    public static void main(Strings []args){ 

     PrintWriter pw = new PrintWriter(new file("C:/Users/Me/Desktop/directory/file.txt")); 

     pw.println("hello"); 
     pw.close 
    } 

}

0

El PrintWriter class realmente puede crear el archivo para usted.

Este ejemplo funciona en JDK 1.7+.

// This will create the file.txt in your working directory. 

PrintWriter printWriter = null; 

try { 

    printWriter = new PrintWriter("file.txt", "UTF-8"); 
    // The second parameter determines the encoding. It can be 
    // any valid encoding, but I used UTF-8 as an example. 

} catch (FileNotFoundException | UnsupportedEncodingException error) { 
    error.printStackTrace(); 
} 

printWriter.println("Write whatever you like in your file.txt"); 

// Make sure to close the printWriter object otherwise nothing 
// will be written to your file.txt and it will be blank. 
printWriter.close(); 

Para obtener una lista de codificaciones válidas, see the documentation.

Como alternativa, puede simplemente pasar la ruta del archivo a la clase PrintWriter sin declarar la codificación.

1

Debe tener una idea clara de las excepciones en java. En Java hay excepciones marcadas y excepciones sin marcar.

El compilador verifica las excepciones marcadas (no lanzadas, simplemente revisadas) en el momento de la compilación para la ejecución sin problemas del programa en tiempo de ejecución.

NOTA: En nuestro programa si su es una posibilidad de que una excepción comprobada aumentará, entonces debemos manejar esa excepción revisada ya sea por intento de captura o lanza word.Otherwise clave obtendremos un error de tiempo de compilación:

CE: Excepción inesperada java.io.FileNotFoundException; debe capturarse o declararse lanzada.

Cómo resolver: 1.Put su código en el bloque intento de captura:

2.use lanza de palabras clave como se muestra por otros tipos anteriores.

Consejo:. Leer más sobre Excepciones (personalmente me encanta este tema)

0

doble clic en el file.txt, a continuación, guardarlo, command + s, que funcionó en mi caso. Además, asegúrese de que file.txt esté guardado en la carpeta del proyecto. Si eso no funciona.

PrintWriter pw = new PrintWriter(new File("file.txt")); 
pw.println("hello world"); // to test if it works. 
Cuestiones relacionadas