2015-10-08 5 views
0

Я следующий текстовый файл с 0 или 1 в первом затем две строки всех трех разделенных запятыми:Редактирование одиночных символов в текстовом файле (Java)

0  ,  Bx  ,  Cz 
1  ,  By  ,  Cx 
0  ,  Bz  ,  Cy 
etc. ,  etc. ,  etc. 

И у меня есть следующий код:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.InputStream; 
import java.util.Scanner; 

public class Manager { 

static Scanner scanner; 

public Manager() { 

} 

public static void chooseFile(String thisFile) { 
    try { 
     scanner = new Scanner(new File(thisDeck)); 
     scanner.useDelimiter(","); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

static String getB() { 
    String b = null; 
    if (scanner.hasNextLine()) { 
     String a = scanner.next(); 
     do { 
      if (a.equals("1")) { 
       scanner.nextLine(); 
       a = scanner.next(); 
      } 
      if (a.equals("0")) { 
       b = scanner.next(); 
      } 
     } while (scanner.hasNextLine() && a.equals("1")); 
    } 
    if (!scanner.hasNextLine()) { 
     b = “Done.”; 
    } 
    return b; 
} 

static String getC() { 
    String c = null; 
    if (scanner.hasNextLine()) { 
     c = scanner.nextLine().substring(2);  
    } else { 
     c = “Done.”; 
    } 
    return c; 
} 

static void changeA1() { 
    //Here I want to change a value in the first "column" A to 1 
    //The row/line to be changed is the one that the scanner just passed 
} 
static void changeA0() { 
    //Here I want to change a value in the first "column" A to 0 
    //The row/line to be changed is the one that the scanner just passed 
} 

} 

Вопрос в том, как изменить значение A на 0 или 1? GUI (который вызывает этот класс) позволяет пользователю изменять значение -A после вызова getB(), а затем getC(), поэтому сканер находится в конце строки, когда функции для изменения значения A будет вызываться линия. Могу ли я изменить значение-A со вторым сканером или есть другой способ?

+0

Это действительно сложно понять ваш вопрос, может быть, из-за недостающего кода, может быть, потому, что я не понимаю, какой результат вам нравится, попробуйте изменить свой вопрос, и я уверен, что кто-то в Интернете даст вам ответ –

+0

Объясните, какие изменения вы хотите достичь: Изменение всех «а» до нулей? Изменение всех «а» на одни? Изменить нули на единицы и наоборот? –

ответ

0

Scanner не допускает каких-либо изменений файла вообще. Для этой цели вам придется использовать FileWriter или другой класс. И вообще не рекомендуется использовать два объекта для одновременного изменения и чтения файла. Большинство классов даже не допускают этого из-за того, что файл-контент обычно будет потоковым (файл открыт все время, и новый кусок загружается при обработке полного буфера).

Самый простой подход, скорее всего, будет RandomAccessFile (http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html).

Это может также ускорить полный код довольно много, если значения всегда фиксированного размера. Но довольно сложно рекомендовать что-либо без дополнительной информации о структуре файла.