Скопировать содержимое одного текстового файла в другой в Java
Я пытаюсь скопировать содержимое одного текстового файла ("1.txt"), который содержит 2-3 целых числа (например: 1 2 3) в другой текстовый файл ("2.тхт") но я получаю следующую ошибку при компиляции
import java.io.*;
class FileDemo {
public static void main(String args[]) {
try {
FileReader fr=new FileReader("1.txt");
FileWriter fw=new FileWriter("2.txt");
int c=fr.read();
while(c!=-1) {
fw.write(c);
}
} catch(IOException e) {
System.out.println(e);
} finally() {
fr.close();
fw.close();
}
}
}
подскажу:-
C:Documents and SettingsSalmanDesktop>javac FileDemo.java
FileDemo.java:20: error: '{' expected
finally()
^
FileDemo.java:20: error: illegal start of expression
finally()
^
FileDemo.java:20: error: ';' expected
finally()
^
FileDemo.java:27: error: reached end of file while parsing
}
^
4 errors
но после проверки кода я нахожу, что блок finally () правильно закрыт.
8 ответов
это finally
, а не finally()
:
try {
//...
} catch(IOException e) {
//...
} finally {
//...
}
кстати, у вас там бесконечная петля:
int c=fr.read();
while(c!=-1) {
fw.write(c);
}
вы должны прочитать данные внутри цикла, чтобы позволить ему закончить:
int c=fr.read();
while(c!=-1) {
fw.write(c);
c = fr.read();
}
на finally
заблокировать ваш fr
и fw
переменные не могут быть найдены, так как они объявлены в рамках try
блок. Объявите их снаружи:
FileReader fr = null;
FileWriter fw = null;
try {
//...
теперь, так как они инициализируются с null
значение, вы также должны сделать null
проверьте перед их закрытием:
finally {
if (fr != null) {
fr.close();
}
if (fw != null) {
fw.close();
}
}
и close
метод на обоих может бросить IOException
это также должно быть обработано:
finally {
if (fr != null) {
try {
fr.close();
} catch(IOException e) {
//...
}
}
if (fw != null) {
try {
fw.close();
} catch(IOException e) {
//...
}
}
}
в конце концов, поскольку вы не хотите иметь много кода для закрытия основного потока, просто переместите его в метод, который обрабатывает Closeable
(обратите внимание, что оба FileReader
и FileWriter
реализует этот интерфейс):
public static void close(Closeable stream) {
try {
if (stream != null) {
stream.close();
}
} catch(IOException e) {
//...
}
}
в конце концов, ваш код должен выглядеть например:
import java.io.*;
class FileDemo {
public static void main(String args[]) {
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("1.txt");
fw = new FileWriter("2.txt");
int c = fr.read();
while(c!=-1) {
fw.write(c);
c = fr.read();
}
} catch(IOException e) {
e.printStackTrace();
} finally {
close(fr);
close(fw);
}
}
public static void close(Closeable stream) {
try {
if (stream != null) {
stream.close();
}
} catch(IOException e) {
//...
}
}
}
начиная с Java 7, у нас есть try-with-resources
, поэтому код выше может быть переписан как:
import java.io.*;
class FileDemo {
public static void main(String args[]) {
//this will close the resources automatically
//even if an exception rises
try (FileReader fr = new FileReader("1.txt");
FileWriter fw = new FileWriter("2.txt")) {
int c = fr.read();
while(c!=-1) {
fw.write(c);
c = fr.read();
}
} catch(IOException e) {
e.printStackTrace();
}
}
}
более эффективный способ-это...
public class Main {
public static void main(String[] args) throws IOException {
File dir = new File(".");
String source = dir.getCanonicalPath() + File.separator + "Code.txt";
String dest = dir.getCanonicalPath() + File.separator + "Dest.txt";
File fin = new File(source);
FileInputStream fis = new FileInputStream(fin);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
FileWriter fstream = new FileWriter(dest, true);
BufferedWriter out = new BufferedWriter(fstream);
String aLine = null;
while ((aLine = in.readLine()) != null) {
//Process each line and add output to Dest.txt file
out.write(aLine);
out.newLine();
}
// do not forget to close the buffer reader
in.close();
// close buffer writer
out.close();
}
}
его ошибка компиляции
public static void main(String args[])
{
try
{
FileReader fr=new FileReader("1.txt");
FileWriter fw=new FileWriter("2.txt");
int c=fr.read();
while(c!=-1)
{
fw.write(c);
}
}
catch(IOException e)
{
System.out.println(e);
}
finally // finally doesn't accept any arguments like catch
{
fr.close();
fw.close();
}
}
A Finally
блок не должен иметь круглые скобки.
попробуй:
import java.io.*;
class FileDemo
{
public static void main(String args[])
{
try
{
FileReader fr=new FileReader("1.txt");
FileWriter fw=new FileWriter("2.txt");
int c=fr.read();
while(c!=-1)
{
fw.write(c);
c = fr.read(); // Add this line
}
}
catch(IOException e)
{
System.out.println(e);
}
finally
{
fr.close();
fw.close();
}
}
}
проверить это javapractices вы получите лучшую идею. это поможет вам понять больше о try catch, наконец.
import java.io.*;
class FileDemo
{
public static void main(String args[])throws IOException
{
FileReader fr=null;
FileWriter fw=null;
try
{
fr=new FileReader("1.txt");
fw=new FileWriter("2.txt");
int c=fr.read();
while(c!=-1)
{
fw.write(c);
}
}
catch(IOException e)
{
System.out.println(e);
}
finally
{
fr.close();
fw.close();
}
}
}
1.ваш код неверен > блок finally не принимает скобки вперед, если он. 2.скобки всегда стоят только перед методами. 3.дорогой ваш объем объектов FileReader и FileWrier заканчивается в блоках try, поэтому вы получите еще одну ошибку в блоке finally, который fw не найден и fr не найден 4."throws IOEXception" также упоминает фронт основной функции
public class Copytextfronanothertextfile{
public static void main(String[] args) throws FileNotFoundException, IOException {
FileReader fr = null;
FileWriter fw = null;
try{
fr = new FileReader("C:\Users\Muzzammil\Desktop\chinese.txt");
fw = new FileWriter("C:\Users\Muzzammil\Desktop\jago.txt");
int c;
while((c = fr.read()) != -1){
fw.write(c);
}
}finally{
if (fr != null){
fr.close();
}
if(fw != null){
fw.close();
}
}
}
}
попробуйте этот код:
class CopyContentFromToText {
public static void main(String args[]){
String fileInput = "C://Users//Adhiraj//Desktop//temp.txt";
String fileoutput = "C://Users//Adhiraj//Desktop//temp1.txt";
try {
FileReader fr=new FileReader(fileInput);
FileWriter fw=new FileWriter(fileoutput);
int c;
while((c=fr.read())!=-1) {
fw.write(c);
}
fr.close();
fw.close();
}
catch(IOException e) {
System.out.println(e);
}
}
}