我有一个文件,里面全是双精度的数据,而且这些数据以矩阵的形式在文件中排布,现在我想把这些数据的行和列倒换一下,意思就是矩阵的转置,下面是举的一个小例子,
比如我现在有一个数字文件里面的数据如下:
11 12 13 14
21 22 23 34
31 32 33 34
41 42 43 44
我想处理后的结果应该是这样的
11 21 31 41
12 22 32 42
13 23 33 43
14 24 34 44
我不知道怎么去实现,下面是我的代码,每次得到的是一竖列的数字,因为我想每次重新读取之后放入文件中去,但不知道怎么定位第一行文件.谢谢大家.
由于文件太大,不能全部读入内存中处理,只能一行行的读取.我的代码如下:
/**

*/
import java.io.*;
import java.util.*;
/**
* @author *
*/
public class Transpose {
public static int size=0;
public static int halfsize=0;
public static int number=0;
/**
  * @param args
  */
public static void DoTranspose(String s)throws Exception{
  File tran_s=new File("tran2_"+s);
  FileReader re=new FileReader(s);
  BufferedReader buffer=new BufferedReader(re);
  PrintWriter out=new PrintWriter(new FileWriter(tran_s));
  FileReader re2=new FileReader(tran_s);
  //BufferedReader buffer2=new BufferedReader(re2);
  LineNumberReader lineread=new LineNumberReader(re2);
  String temp,temp2;
  while(((temp=buffer.readLine())!=null)){
   number++;
   temp2=lineread.readLine();
   String tarray[]=temp.split("[\\s]+");
   size=tarray.length;
   //halfsize=(int)size/2;
   System.out.println(size);
   //System.out.println(halfsize); 
   if(temp2==null){
    for(int i=0;i<size;i++){
     out.print(tarray+" ");
     out.print("\r\n");
     //System.out.print(temp2);
     }
    
   }
   else{
    lineread.setLineNumber(1);  
    temp2=lineread.readLine();
    for(int i=0;i<size;i++){
    out.print(temp2+" "+tarray+" ");
    out.print("\r\n");
     
    }
    
    
   }
   
  
   
   
   
  }
  
  out.flush();
  out.close();
  
  
}
public static void main(String[] args) {
  // TODO Auto-generated method stub
  try{DoTranspose("a.txt");}
  catch(Exception e){e.printStackTrace();}}
}

解决方案 »

  1.   

    改成这样了.
    package csdn;import java.io.*;/**
     * @author *
     */
    public class Transpose {
    public static int size = 0; public static int halfsize = 0; public static int number = 0; /**
     * @param args
     */
    public static void DoTranspose(String s) throws Exception {
    FileReader re = new FileReader(s);
    BufferedReader buffer = new BufferedReader(re);
    File tran_s = new File("src/csdn/tran2_a.txt");
    PrintWriter out = new PrintWriter(new FileWriter(tran_s));
    FileReader re2 = new FileReader(tran_s);
    LineNumberReader lineread = new LineNumberReader(re2);
    String temp=buffer.readLine(), temp2;
    String[] result = null;
    while (temp != null) {
    String tarray[] = temp.split("\\s+");
    temp=buffer.readLine();
    size = tarray.length;
    if (number == 0) {
    for (int i = 0; i < size; i++) {
    out.write(tarray[i] + " ");
    out.write("\r\n");
    }
    } else {
    lineread.setLineNumber(1);
    result = new String[size];
    for (int i = 0; i < size; i++) {
    temp2 = lineread.readLine();
    System.out.println(lineread.getLineNumber()-1+"----"+number+":"+temp2);
    out.write(temp2 + " " + tarray[i] + " ");
    out.write("\r\n");
    result[i] = temp2 + " " + tarray[i];
    } }
    number++;
    out.flush();
    }
    out = new PrintWriter(new FileWriter(tran_s,false));
    for (int i = 0; i < size; i++) {
    out.write(result[i]);
    out.write("\r\n");
    }
    out.flush();
    out.close(); } public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
    DoTranspose("src/csdn/a.txt");
    } catch (Exception e) {
    System.out.println(e.toString());
    } }
    }
      

  2.   

    非常感谢,祝愿shan1119 一切顺利!