2012-01-04 3 views
0

Так что я каждый день изучаю новые вещи в Java, и я надеюсь, что однажды я должен обладать такими же знаниями на Java, как и на PHP.Функция записи/чтения файлов, как в PHP

Я пытаюсь сделать класс, который похож на fopen, fwrite, fclose в PHP, как:

<?php 
$fp = fopen('data.txt', 'w'); 
fwrite($fp, '1'); 
fwrite($fp, '23'); 
fclose($fp); 

// the content of 'data.txt' is now 123 and not 23! 
?> 

Мне также нужен метод написания

о - для удаления и запись/перезапись

- для Append в конце

и функция чтения, которая возвращает содержимое строки за строкой, поэтому я могу поместить его в массив, например file_get_contents (файл);

Это то, что я до сих пор ...

import java.io.*; 
import java.util.Scanner; 

/** 
Read and write a file using an explicit encoding. 
Removing the encoding from this code will simply cause the 
system's default encoding to be used instead. 
**/ 
public final class readwrite_txt 
{ 

    /** Requires two arguments - the file name, and the encoding to use. **/ 
    public static void main(String[] args) throws IOException 
    { 
     String fileName = "text.txt"; 
     String encoding = "UTF-8"; 

     readwrite_txt test = new readwrite_txt(fileName,encoding); 
     test.write("argument.txt","some text","UTF-8","o"); 
    } 

    /** Constructor. **/ 
    readwrite_txt(String fileName, String encoding) 
    { 
     String fEncoding = "text.txt"; 
     String fFileName = "UTF-8"; 
    } 

    /** Write fixed content to the given file. **/ 
    public void write(String fileName,String input,String encoding,String writeMethod) throws IOException 
    { 
     // Method overwrite 
     if(writeMethod == "o") 
     { 
      log("Writing to file named " + fileName + ". Encoding: " + encoding); 
      Writer out = new OutputStreamWriter(new FileOutputStream(fileName), encoding); 
      try 
      { 
       out.write(input); 
      } 
      finally 
      { 
       out.close(); 
      } 
     } 
    } 

    /** Read the contents of the given file. **/ 
    public void read(String fileName,String output,String encoding,String outputMethod) throws IOException 
    { 
     log("Reading from file."); 
     StringBuilder text = new StringBuilder(); 
     String NL = System.getProperty("line.separator"); 
     Scanner scanner = new Scanner(new FileInputStream(fileName), encoding); 
     try 
     { 
      while (scanner.hasNextLine()) 
      { 
      text.append(scanner.nextLine() + NL); 
      } 
     } 
     finally 
     { 
      scanner.close(); 
     } 
     log("Text read in: " + text); 
    } 

    // Why write System.out... when you can make a function like log("message"); simple! 
    private void log(String aMessage) 
    { 
    System.out.println(aMessage); 
    } 
} 

также, я не понимаю, почему я должен иметь

readwrite_txt test = new readwrite_txt(fileName,encoding); 

вместо

readwrite_txt test = new readwrite_txt(); 

I просто хочу иметь простую функцию, аналогичную функции PHP.

EDITED

Так что моя функция должна быть

$fp = fopen('data.txt', 'w'); ==> readwrite_txt test = new readwrite_txt(filename,encoding,writeMethod); 

fwrite($fp, '23');   ==> test.write("the text"); 

fclose($fp);     ==> ??? 

ответ

2

прочитать файл в Java вы можете

FileInputStream fstream = new FileInputStream("file.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
String strLine; 

while ((strLine = br.readLine()) != null) //Start of reading file 
{ 
    //what you want to do with every line is here 
} 

но readwrite_txt test = new readwrite_txt(); проблемы .. вы должны иметь другой конструктор внутри класса, который не принимает никаких параметров

+0

работает, но я должен сделать его как функцию, которая может вернуть массив, идея состоит в том, что все должно быть упорядочено и элегантно ... – Master345

+1

Чтобы вернуть массив, вы можете использовать ArrayList из String, вы можете подробнее об этом классе читайте здесь: http://javarevisited.blogspot.com/2011/05/example-of-arraylist-in-java-tutorial.html. Вы должны добавить все строки из своего буфера в этот ArrayList и вернуть ArrayList. Если вы используете Java, забудьте про простые функции, все должно быть частью класса. У этого много проблем и много недостатков. –

+0

Итак, ваша проблема в возврате массива?! ArrayLists решит вашу проблему наверняка это фиктивный код для его 'ArrayList массива = новый ArrayList (); array.add ("1"); array.add ("2"); array.clear(); ' – mhyassin

1

Вы можете использовать BufferedReader, here является примером и BufferedWriter, here является примером записи и here является примером для добавления. Для чтения строк за строкой вы можете использовать метод readLine для BufferedReader. Вам не нужны эти параметры в вашем конструкторе, потому что вы их не используете, но вам даже не нужен класс для реализации этих функций, потому что для этой цели уже существуют стандартные классы.

Надеюсь, это поможет.

+0

интересно, но есть ли способ сделать его похожим на PHP? если это не recomanded метод сделать класс, чтобы выглядеть как в PHP, хорошо, я читаю/писать JAVA стиль ... – Master345

+0

Java - это объектно-ориентированная технология на основе классов. Вы никогда не должны явно хотеть, чтобы ваш Java-код выглядел как PHP-код, потому что у этих двух технологий есть разные парадигмы. Нет смысла изобретать велосипед, вы должны использовать стандартные классы, когда это возможно, исключения - это случаи, когда они не могут что-то сделать. Но даже тогда это лучший вариант для расширения/реализации данного стандартного класса, чем для записи нового класса из 0. Лучше привыкнуть к стилю Java, если вы хотите работать на Java, проще понять другие коды, если ничего другого. –

+0

Java не так злой, как может показаться на первый взгляд, вы можете сделать довольно приятные вещи с Java, но желание писать код в Java в стиле PHP - это желание говорить по-английски с немецким акцентом. Это может сработать, но вы всегда будете в невыгодном положении. Гораздо лучше работать над своим акцентом, когда вы изучаете новый язык. Вы могли бы написать превосходные немецкие стихи, но лучше говорить по-английски без акцента, если это возможно, если вы знаете, что я имею в виду. –

Смежные вопросы