2016-10-10 2 views
1

У меня есть назначение для моего класса Java, который просит меня объединить два текстовых файла.Java, объединяющий два текстовых файла

Это код, который у меня есть до сих пор.

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 

public class CombineTwoFile { 
    public static void main(String[] args) throws IOException 
    { 
     ArrayList<String> list = new ArrayList<String>(); 
     try 
     { 
      BufferedReader br = new BufferedReader(new FileReader("A.txt")); 
      BufferedReader r = new BufferedReader(new FileReader("B.txt")); 
      String s1 =null; 
      String s2 = null; 

      while ((s1 = br.readLine()) != null) 
      { 
       list.add(s1);   
      } 
      while((s2 = r.readLine()) != null) 
      { 
       list.add(s2); 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

     BufferedWriter writer=null; 
     writer = new BufferedWriter(new FileWriter("B.txt")); 
     String listWord;    
     for (int i = 0; i< list.size(); i++) 
     { 
      listWord = list.get(i); 
      writer.write(listWord); 
      writer.write("\n"); 
     } 
     System.out.println("completed"); 
     writer.close();  
    } 
} 

Теперь, когда я скомпилирую его, я получаю это сообщение.

java.io.FileNotFoundException: A.txt (No such file or directory) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:120) 
at java.io.FileInputStream.<init>(FileInputStream.java:79) 
at java.io.FileReader.<init>(FileReader.java:41) 
at CombineTwoFile.main(CombineTwoFile.java:15) 
completed 

Я использую Coderunner на компьютере Apple, и я думал, возможно, писать текстовые файлы как «C: /Users/dell/Desktop/Test/input1.txt» может решить эту проблему, однако я не уверен в как написать это, чтобы соответствовать моему жесткому диску. Спасибо, что посмотрели, и я ценю любую помощь.

+0

Вам нужен полный путь к вашим файлам. 'new FileReader (« A.txt »)' попытается прочитать файлы из вашего пути к классам. –

+0

Файл 'A.txt' либо не существует, либо находится в неправильном месте. Вы можете найти, куда положить файл, выполнив регистрацию следующего значения: 'new File (« A.txt »). GetCanonicalPath()'. –

+0

Просто добавьте файл A.txt в каталог и внутри нового FileReader («A.txt»)) вместо передачи только «A.txt», передайте в качестве аргумента полный путь к файлу A.txt. Пример, если вы поместите файл A.txt в папку temp на диске C. вы пройдете в качестве аргумента C: \\ temp \\ A.txt. – HaroldSer

ответ

0

Ваша Java-программа не может найти «A.txt» в нужном месте, чтобы узнать, где разместить файл, вы можете использовать system.getproperty(user.dir), чтобы узнать, где система ищет файл. Другой путь вы можете написать абсолютный путь в new File('c:\\something\\A.txt');

Надежда это помогает

+0

Im в классе прямо сейчас, и мой профессор сказал, что не следует включать в абсолютный путь, потому что она просто поместит все файлы в одну папку и проверит их. Любые другие возможные решения? Или, может быть, есть простое решение о «размещении файла txt в нужном месте?» Не совсем уверен, где он выглядит. Я также попытался открыть txt-файлы в моем приложении для кодирования –

+0

использовать System.out.println (system.getproperty (user.dir)); чтобы увидеть рабочий каталог, infact разместить текстовый файл в том же месте, что и файл java, и адрес файла будет что-то вроде «system.getproperty (user.dir)» + «A.txt» .. Надеюсь, вы получите его – 100rabh

+0

вы также можете использовать «System.out.println (новый файл (« A.txt »). getCanonicalPath()); чтобы посмотреть, куда помещать файл, но выше метод более подходит для назначений. – 100rabh

0

Лукаса, ваша программа абсолютно права. вам не нужно ничего корректировать, просто создайте файл «A.txt» вручную, а затем запустите этот код еще раз.

2

Есть несколько вещей, которые можно улучшить здесь.

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

Вы можете указать абсолютный путь или относительный путь по сравнению с классом.

Если вы хотите оставить его как есть, вам нужно будет поместить файл в classpath (где работает ваш класс).

Смотреть это для получения дополнительной информации о absolute и relative path:

http://www.xyzws.com/javafaq/what-is-the-difference-between-absolute-relative-and-canonical-path-of-file-or-directory/60

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

Я также предлагаю вам использовать новый try-with-resources.

Пример:

try(BufferedReader bf = new BufferedReader(new FileReader("C:\\Users\\...\\A.txt"));){ 

    //do something 

} catch(IOException e){ 

    //handle 

} 

//no need to close the streams, the jgc will handle that for you 

Это закроет потоки для вас, когда вы закончите использовать их, внутри блока Try.

Если ваш учитель (как вы добавили в одном комментарии) хочет, чтобы вы могли динамически выбирать путь, вам нужно будет ввести его с консоли и использовать это как абсолютный путь.

Scanner s = new Scanner(System.in); 
String path = s.readLine(); //use this as absolute path 

Если вам нужно сделать, это от GUI, тебе нужен JFileChooser.

Что касается написания, то применяются те же предложения.

Вы также можете избежать записи строки + '\ n' с помощью PrintWriter. Он предоставит метод println (String s), авто-флеш, и это лучше по соображениям переносимости.

В незначительной ноты, в этом случае, если вы на самом деле не нужно s2, используя s1 снова будет делать только штраф.

+0

Нет проблем. Я отредактировал и добавил еще несколько предложений, в том числе использование PrintWriter. – Athamas

0

просто место

System.out.println(new File("A.txt").getCanonicalPath());

перед тем

BufferedReader br = new BufferedReader(new FileReader("A.txt")); 

BufferedReader r = new BufferedReader(new FileReader("B.txt")); 

вы получите точный путь до появления информации, за исключением, как:

C:\Users\PiyushMittal\Downloads\Java-mongodb-hello-world-example\mongodb\A.txt 
java.io.FileNotFoundException: A.txt (The system cannot find the file specified) 
completed at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileInputStream.<init>(FileInputStream.java:93) 
    at java.io.FileReader.<init>(FileReader.java:58) 
    at com.mkyong.core.CombineTwoFile.main(CombineTwoFile.java:19) 

и самой первой строке это место, где вы должны поставить файл :)

Смежные вопросы