파일 이름과 파일에 쓸 2 차원 데이터 배열을 허용하는 스레드 생성자를 만드는 데 문제가 있습니다. 스레드 실행 메소드는 해당 2-d 배열을 파일에 쓴 다음 courses.txt 파일과 students.txt 파일에 대해이 스레드를 인스턴스화한다고 가정합니다. 다중 스레드 응용 프로그램을 사용하여이 작업을 수행하려고합니다. 2D 배열은 이미 코드에서 작성한 것처럼 2D 문자열 배열입니다. 데이터를 2D 문자열 배열에 하드 코딩했는데 파일을 쓸 스레드에 파일 이름과 배열을 전달하는 방법에 대해 약간 혼란 스럽습니다. 두 파일 중 하나를 쓰는 하나의 run() 메서드로 하나의 스레드 클래스를 작성할 수 있다는 것을 알고 있습니다. WriteFiles.java의 main()에 두 개의 스레드 인스턴스를 만들고 Student 데이터를 전달하고 다른 데이터를 전달하는 방법은 무엇입니까?다중 스레드 응용 프로그램과 함께 WriteFiles를 만드는 데 문제가 있습니다.
이 코드가 지금까지 가지고 몇 가지 지침 사랑입니다 : 마지막 students.txt 출력이이처럼 보이도록 생각됩니다
import java.util.*;
import java.io.*;
class WriteFiles implements Runnable
{
static final String FILE = "courses.txt";
static final String FILE2 = "students.txt";
BufferedWriter bw;
Thread thread[] = new Thread[2];
private String studentList[][];
private String courseList[][];
public WriteFiles()
{
try
{
bw = new BufferedWriter(new FileWriter(FILE));
bw = new BufferedWriter(new FileWriter(FILE2));
}
catch(FileNotFoundException fnfe)
{
System.out.println(fnfe);
System.exit(1);
}
catch(IOException ioe)
{
System.out.println(ioe);
System.exit(2);
}
}
public void writeFile(String str)
{
try{
bw.write(str);
} catch(IOException ioe){
System.out.println(ioe);
}
}
public void run()
{
String studentList[][] = {
{"Python","INSY 3300","530-650 MW","1,3"},
{"Networking","INSY 3303","530-650 TR","1,3"},
{"DBMS","INSY 3304","900-950 MWF","1,3"},
{"Analysis&Design","INSY 3305","700-820 TR","1,3"},
{"Java I","INSY 4305","700-820 TR","1,3"},
{"Java II","INSY 4306","530-650 TR","1,3"},
{"Mobile App","INSY 4308","200-320 TR","1,3"},
{"Web Development","INSY 4315","1000-1050 MWF","1,3"},
{"Resource Management","INSY 4325","100-220 TR","1,3"}
};
String courseList[][] = {
{"US","NONRESIDENT","123456","Jones","123 Cooper St","Arlington","Texas","76019","12345"},
{"INT","ACTIVE","A-654789","Degrassey","18 Love Lane","Dallas","Texas","75052","67123"},
{"INT","INACTIVE","A-543891","Franco","1201 Trail Road","Euless","Texas","74032","19814"},
{"US","RESIDENT","345123","Hughes","1803 Division","Fort Worth","Texas","76034","674532"},
{"US","RESIDENT","988776","Cooper","111 Marsh Lane","Bedford","Texas","76111","90906"},
{"INT","INACTIVE","B-577463","Patel","2218 Border St","Arlington","Texas","76015","81832"}
};
}
public void writeCourses()
{
for (Student s:studentList){
System.out.print(s.toString());
}
}
public void writeStudents()
{
for (Course c:courseList){
System.out.print(c.toString());
}
}
public static void main(String arg[])
{
WriteFiles myTread = new WriteFiles();
myTread.writeCourses();
myTread.writeStudents();
}
}
을; 데이터에 따라 분할 :
미국, 비거주자, 123456, 존스 123 쿠퍼 세인트, 알링턴, 텍사스, 76019, 12345 INT, ACTIVE, A-654789; Degrassey 18 러브 레인, 달라스, 텍사스, 75052, 67123 휴즈, 1803 부서, 포트 워스, 텍사스, 76034, 674532 미국, 거주자, 988776, 술 장수, 술집, 술집, 술집, 111 마쉬 레인, 베드 포드, 텍사스, 76111, 90906 INT 비활성, B-577463; 파텔, 2218 국경 세인트, 알링턴, 텍사스, 76015, 최종 course.txt 출력과 같이 할 생각입니다 81,832
a; 데이터마다 분할 :; 3300 INSY;
파이썬 530-650 MW 1 3 네트워킹; INSY 3303; 530-650 TR 1 3 DBMS; INSY 3304; 900-950 MWF 1 3 분석 및 설계; INSY 3305; 700-820 TR; 1; 3 Java I; INSY 4305; 700-820 TR; 1; 3 Java II; INSY 4306; 530-650 TR; 1; 3 모바일 응용 프로그램; INSY 4308; 200-320 TR 1, 3 웹 개발, INSY 4315; 1,000에서 1,050 사이 MWF 1, 3 자원 관리, INSY 4325; 100-220 TR 1은,
3 내가 문제 일이 점점 없었다 다른 방법으로 성공했지만 지금은 다중 스레드 응용 프로그램을 사용하여 다른 접근 방식을 시도하고 있습니다. 여기 스레드없이 작업을 출력했다 :
import java.util.*;
import java.io.*;
public class WriteFiles {
private static Formatter output;
private static Scanner input;
public static void main(String[] args) {
ArrayList<Student> studentList = new ArrayList<Student>();
writeTextFile1();
for (Student s:studentList){
System.out.print(s.toString());
}
ArrayList<Course> courseList = new ArrayList<Course>();
writeTextFile();
for (Course c:courseList){
System.out.print(c.toString());
}
}
public static void writeTextFile(){
try{
output = new Formatter("courses.txt");
output.format("%s;%s;%s;%d;%d%n","Python","INSY 3300","530-650 MW",1,3);
output.format("%s;%s;%s;%d;%d%n","Networking","INSY 3303","530-650 TR",1,3);
output.format("%s;%s;%s;%d;%d%n","DBMS","INSY 3304","900-950 MWF",1,3);
output.format("%s;%s;%s;%d;%d%n","Analysis&Design","INSY 3305","700-820 TR",1,3);
output.format("%s;%s;%s;%d;%d%n","Java I","INSY 4305","700-820 TR",1,3);
output.format("%s;%s;%s;%d;%d%n","Java II","INSY 4306","530-650 TR",1,3);
output.format("%s;%s;%s;%d;%d%n","Mobile App","INSY 4308","200-320 TR",1,3);
output.format("%s;%s;%s;%d;%d%n","Web Development","INSY 4315","1000-1050 MWF",1,3);
output.format("%s;%s;%s;%d;%d%n","Resource Management","INSY 4325","100-220 TR",1,3);
output.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
public static void writeTextFile1(){
try{
output = new Formatter("students.txt");
output.format("%s;%s;%s;%s;%s;%s;%s;%d;%d%n","US","NONRESIDENT","123456","Jones","123 Cooper St","Arlington","Texas",76019,12345);
output.format("%s;%s;%s;%s;%s;%s;%s;%d;%d%n","INT","ACTIVE","A-654789","Degrassey","18 Love Lane","Dallas","Texas",75052,67123);
output.format("%s;%s;%s;%s;%s;%s;%s;%d;%d%n","INT","INACTIVE","A-543891","Franco","1201 Trail Road","Euless","Texas",74032,19814);
output.format("%s;%s;%s;%s;%s;%s;%s;%d;%d%n","US","RESIDENT","345123","Hughes","1803 Division","Fort Worth","Texas",76034,674532);
output.format("%s;%s;%s;%s;%s;%s;%s;%d;%d%n","US","RESIDENT","988776","Cooper","111 Marsh Lane","Bedford","Texas",76111,90906);
output.format("%s;%s;%s;%s;%s;%s;%s;%d;%d%n","INT","INACTIVE","B-577463","Patel","2218 Border St","Arlington","Texas",76015,81832);
output.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
}
이 정보는 사람에게 도움이됩니다. 하지만 이제는 Formatter를 사용해야하고 BufferedWriter를 사용할 수 없다는 말을 듣고 있습니다. try 메서드에서 student 클래스의 실제 String 배열을 올바르게 삽입하고 있습니까? 코스를위한 다른 try 메소드? ..... 그리고 내가 스레드를 시작하는 주요 thats에?. – Donovan
문자열 배열은 학생 _ 또는 _ 과목을위한 것일 수 있습니다. 코드 재사용이 중요한 부분입니까? 다시 말하지만, 코드를 다르게 처리해야한다면 코드를 공유 할 필요가 없습니다. – Gray
또한 @Fred, 필자는'Formatter' 코드를 올바르게 작성할 수 있다고 생각합니까? – Gray