我的问题是从txt文件读取非素数并在同一文件中写入素因子。 我实际上不知道BufferedReader是如何工作的。从我的理解我试图将文件数据读取到缓冲区(8kb)并将素数因子写入文件。(通过创建一个新的)
class PS_Task2
{
public static void main(String[] args)
{
String line=null;
int x;
try
{
FileReader file2 = new FileReader("nonprimes.txt");
BufferedReader buff2=new BufferedReader(file2);
File file1 = new File("nonprimes.txt");
file1.createNewFile();
PrintWriter d=new PrintWriter(file1);
while((line = buff2.readLine()) != null)
{
x=Integer.parseInt(line);
d.printf ("%d--> ", x);
while(x%2==0)
{
d.flush();
d.print("2"+"*");
x=x/2;
}
for (int i = 3; i <= Math.sqrt(x); i = i+2)
{
while (x%i == 0)
{
d.flush();
d.printf("%d*", i);
x = x/i;
}
}
if (x > 2)
{
d.flush();
d.printf ("%d ", x);
}
d.flush();//FLUSING THE STREAM TO FILE
d.println("\n");
}
d.close(); // CLOSING FILE
}
随时提供详细解释。 :D谢谢~anirudh
答案 0 :(得分:1)
根据您的问题陈述,您需要从文件中获取输入,进行一些处理并将处理后的数据写回同一文件中。为此,请注意以下几点:
您不能在目录中创建具有相同名称的文件,因此您必须在其他位置创建新文件;或者将内容写入不同的文件,然后在删除原始文件后将其重命名。
虽然您的文件已打开以供阅读,但修改同一文件并不是一个好主意。你可以使用以下方法:
- 读取文件的内容并存储在数据结构liek Arrays,ArrayList。
中- 关闭文件。
- 处理存储在数据结构中的数据。
- 以写入模式打开文件(覆盖模式而不是追加模式)
- 将处理后的数据写回文件。
醇>
答案 1 :(得分:1)
在java中读取和写入文件并不编辑该文件,但是清除旧文件并创建一个新文件,例如,您可以使用许多方法来获取数据,修改它,并将其保存在内存中。 StringBuilder或一个集合或者什么都重新编写它
我创建了包含以下数据的fileOne.txt:
1 2 3 4 五 6 7 8 9 10 11 12 13 14 15 16
我希望将所有这些数字乘以10,然后再重新编写它们:
public static void main(String [] args) throws Exception{ // just for the example
// locate the file
File fileOne = new File("fileOne.txt");
FileReader inputStream = new FileReader(fileOne);
BufferedReader reader = new BufferedReader(inputStream);
// create a LinkedList to hold the data read
List<Integer> numbers = new LinkedList<Integer>();
// prepare variables to refer to the temporary objects
String line = null;
int number = 0;
// start reading
do{
// read each line
line = reader.readLine();
// check if the read data is not null, so not to use null values
if(line != null){
number = Integer.parseInt(line);
numbers.add(number*10);
}
}while(line != null);
// free resources
reader.close();
// check the new numbers before writing to file
System.out.println("NEW NUMBERS IN MEMORY : "+numbers);
// assign a printer
PrintWriter writer = new PrintWriter(fileOne);
// write down data
for(int newNumber : numbers){
writer.println(newNumber);
}
// free resources
writer.flush();
writer.close();
}
这种方法在处理海量数据时不是很好