Чтение и запись файла с использованием потоков в Java - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь прочитать 5000 целых чисел из файла и записать эти целые числа в другой файл, используя два потока.Вот мой код:

 public class data {
 int value;
 }



  import java.util.*;
  import java.io.*;
  public class oku implements Runnable {

data d;
public oku(data d){
    this.d=d;
}


public synchronized void run(){


    File f= new File("/home/ayyuce/Desktop/ali.dat");
    try{
    Scanner sc= new Scanner(f);
    while(sc.hasNextInt()){
      //synchronized(d){
        d.value=sc.nextInt();

        }

    //}
    sc.close();
    }
    catch(Exception ex){}


  }

  }


 import java.util.*;
 import java.io.*;
 public class yaz implements Runnable {
data d;
public yaz(data d){
    this.d=d;
}
public synchronized void run(){

    File f= new File("/home/ayyuce/Desktop/veri.dat");
    try{
        PrintWriter p = new PrintWriter(f);
        for(int i=0; i<5000;i++){
            //synchronized(d){
            p.println(d.value);
            //System.out.println(d.value);
            }
        //}
        p.close();
    }
    catch(Exception ex){}
   }

 }




public class main_class {
public static void main(String[] args){
    data d= new data();
    //d.value=100;
    oku o= new oku(d);
    yaz y= new yaz(d);
    Thread t1= new Thread(o);
    Thread t2= new Thread(y);
    t1.start();
    t2.start();
  }

}

Я использовал алгоритм потребителя производителя.Он читает из файла и записывает целое число в значение в классе данных, читает из класса данных и записывает в файл.Но это не работает правильно.Он записывает нули в файл.В чем проблема с моим кодом?

Спасибо

1 Ответ

0 голосов
/ 15 мая 2018

Если бы это был я, я бы создал отдельный объект для отслеживания чтения и записи в файл.

public class fileHandler{
    File f;
    printWriter p

    public void fileHandler(String filename){
        f = new File(filename);
        p = new printWriter(f);
    }

    public void write(String str){
        synchronized(p){
            p.println(str);
        }
    }
}

и просто вызывал бы запись из каждого потока в отдельности.Таким образом, у вас не будет нескольких потоков, записывающих в один и тот же файл одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...