Как использовать классы PrintWriter и File в Java?

Я пытаюсь понять PrintWriter для небольшой программы, которую я делаю, и я не могу получить Java для создания файла, а затем писать на нем. Когда я выполняю программу ниже, она выдает мне ошибку Filenotfoundexeption в строке 9. Он также не может создать файл в указанной мной директории. Я новичок в этом, поэтому, пожалуйста, постарайтесь, чтобы ответы были простыми. Я использую Eclipse.

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 ();       
  }
}

10 ответов

Решение

Если каталог не существует, вам нужно его создать. Java не создаст его сам File Класс - это просто ссылка на сущность, которая также может вообще не существовать.

Как вы заявили, ошибка в том, что файл не может быть создан. Если вы читаете документацию конструктора PrintWriter, вы можете увидеть

FileNotFoundException - Если данная строка не обозначает существующий, доступный для записи обычный файл и новый обычный файл с таким именем не может быть создан, или если какая-то другая ошибка возникает при открытии или создании файла

Вы должны попытаться создать путь к папке, в которой он находится:

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

PrintWriter printWriter = new PrintWriter(file);
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 ();       
  }
}

бросить исключение для файла.

Передайте объект File в конструктор PrintWriter(File file):

PrintWriter printWriter = new PrintWriter(file);
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();
            }
        }
    }
}

Вы должны иметь четкое представление об исключениях в Java. В Java есть проверенные исключения и непроверенные исключения.

Проверенные исключения проверяются (не генерируются, просто проверяются) компилятором во время компиляции для плавного выполнения программы во время выполнения.

ПРИМЕЧАНИЕ. И если в нашей программе есть вероятность того, что проверенное исключение возникнет, то мы должны обработать это проверенное исключение либо с помощью try catch, либо с помощью ключевого слова throws. В противном случае мы получим ошибку времени компиляции:

CE: неожиданное исключение java.io.FileNotFoundException; должно быть перехвачено или объявлено как выброшенное.

Как решить: 1. Поместите ваш код в блок try catch:

2.use бросает ключевое слово, как показано другими парнями выше.

Совет: Узнайте больше об Исключениях.(Мне лично нравится эта тема)

Java обычно не принимает "/" для использования в определении файлового каталога, поэтому попробуйте это:

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

Если файл не существует, сделайте:

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

Если вы хотите использовать PrintWrite, попробуйте этот код

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

        java.io.PrintWriter pw=new java.io.PrintWriter("file.txt");
        pw.println("hello world");
        pw.flush();
        pw.close();

    }

}

Дважды щелкните file.txtзатем сохраните его, command + s, что сработало в моем случае. Кроме того, убедитесь, что file.txt сохраняется в папке проекта. Если это не работает.

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

Ну, я думаю, во-первых, держите все основное в попытках поймать public static void main(String arg[]) throws IOException ) а затем также использовать полный путь к файлу, в котором вы пишете как

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

все эти директории, такие как пользователи, я, рабочий стол, каталог, должны быть сделаны пользователем. Ява не будет делать свои собственные каталоги. должно быть как

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();
}   

}

PrintWriter класс может создать файл для вас.

Этот пример работает в 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();

Список допустимых кодировок см. В документации.

Кроме того, вы можете просто передать путь к файлу PrintWriter класс без объявления кодировки.

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
    }

}

Другие вопросы по тегам