Функция записи / чтения файлов, как в PHP - PullRequest
0 голосов
/ 04 января 2012

Так что я каждый день изучаю новые вещи на Java, и я надеюсь, что однажды у меня будут те же знания в Java, что и в 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!
?>

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

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

a - для добавления в конце

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

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

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();

Я просто хочу иметь простую функцию, аналогичную функции в 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);                  ==> ???

Ответы [ 3 ]

2 голосов
/ 04 января 2012

прочитать файл в 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(); проблемы .. у вас должен быть другой конструктор внутри класса, который не принимает никаких параметров

1 голос
/ 04 января 2012

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

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

1 голос
/ 04 января 2012

Взгляните на следующие учебники по обработке файлов (Google изобилует ими):

Обратите внимание на следующие классы:

  • FileInputStream
  • FileOutpuStream
  • Сканер

Есть множество примеров, из которых вы можете поучиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...