Programmazione per computer - File I / O

File di computer

Un file del computer viene utilizzato per memorizzare i dati in formato digitale come testo normale, dati di immagine o qualsiasi altro contenuto. I file del computer possono essere organizzati in diverse directory. I file vengono utilizzati per conservare i dati digitali, mentre le directory vengono utilizzate per conservare i file.

I file del computer possono essere considerati la controparte digitale dei documenti cartacei. Durante la programmazione, mantieni il codice sorgente in file di testo con estensioni diverse, ad esempio, i file di programmazione C terminano con l'estensione.c, File di programmazione Java con estensione .javae file Python con .py.

Input / output file

Di solito, crei file utilizzando editor di testo come Blocco note, MS Word, MS Excel o MS Powerpoint, ecc. Tuttavia, molte volte, è necessario creare file anche utilizzando programmi per computer. Possiamo modificare un file esistente utilizzando un programma per computer.

Input di file significa dati che vengono scritti in un file e output di file significa dati che vengono letti da un file. In realtà, i termini di input e output sono più correlati all'input e all'output dello schermo. Quando visualizziamo un risultato sullo schermo, viene chiamato output. Allo stesso modo, se forniamo un input al nostro programma dal prompt dei comandi, viene chiamato input.

Per ora, è sufficiente ricordare che scrivere in un file è un input di file e leggere qualcosa da un file è un output di file.

Modalità di funzionamento dei file

Prima di iniziare a lavorare con qualsiasi file utilizzando un programma per computer, è necessario creare un nuovo file se non esiste o aprire un file già esistente. In entrambi i casi, possiamo aprire un file nelle seguenti modalità:

  • Read-Only Mode- Se stai per leggere solo un file esistente e non vuoi scrivere altro contenuto nel file, aprirai il file in modalità di sola lettura. Quasi tutti i linguaggi di programmazione forniscono la sintassi per aprire i file in modalità di sola lettura.

  • Write-Only Mode- Se stai per scrivere in un file esistente o in un file appena creato ma non vuoi leggere alcun contenuto scritto da quel file, aprirai il file in modalità di sola scrittura. Tutti i linguaggi di programmazione forniscono la sintassi per aprire i file in modalità di sola scrittura.

  • Read & Write Mode - Se hai intenzione di leggere e scrivere nello stesso file, aprirai il file in modalità di lettura e scrittura.

  • Append Mode- Quando apri un file per la scrittura, ti permette di iniziare a scrivere dall'inizio del file; tuttavia sovrascriverà il contenuto esistente, se presente. Supponiamo di non voler sovrascrivere alcun contenuto esistente, quindi apriamo il file in modalità di aggiunta. La modalità di aggiunta è in definitiva una modalità di scrittura, che consente di aggiungere il contenuto alla fine del file. Quasi tutti i linguaggi di programmazione forniscono la sintassi per aprire i file in modalità di aggiunta.

Nelle sezioni seguenti, impareremo come aprire un nuovo file nuovo, come scrivere in esso e, successivamente, come leggere e aggiungere più contenuto nello stesso file.

Apertura di file

Puoi usare il file fopen()funzione per creare un nuovo file o per aprire un file esistente. Questa chiamata inizializzerà un oggetto del tipoFILE, che contiene tutte le informazioni necessarie per controllare il flusso. Ecco il prototipo, ovvero la firma di questa chiamata di funzione:

FILE *fopen( const char * filename, const char * mode );

Qui, filename è una stringa letterale, che verrà utilizzata per denominare il file e accedere mode può avere uno dei seguenti valori:

Suor n Modalità e descrizione
1

r

Apre un file di testo esistente a scopo di lettura.

2

w

Apre un file di testo per la scrittura. Se non esiste, viene creato un nuovo file. Qui, il tuo programma inizierà a scrivere il contenuto dall'inizio del file.

3

a

Apre un file di testo per la scrittura in modalità di aggiunta. Se non esiste, viene creato un nuovo file. Qui, il tuo programma inizierà ad aggiungere contenuto al contenuto del file esistente.

4

r+

Apre un file di testo per leggere e scrivere entrambi.

5

w+

Apre un file di testo sia in lettura che in scrittura. Prima tronca il file a lunghezza zero, se esiste; altrimenti crea il file se non esiste.

6

a+

Apre un file di testo sia in lettura che in scrittura. Crea un file, se non esiste. La lettura inizierà dall'inizio, ma la scrittura può essere solo aggiunta.

Chiusura di un file

Per chiudere un file, usa il fclose( )funzione. Il prototipo di questa funzione è:

int fclose( FILE *fp );

Il fclose( ) la funzione restituisce zero in caso di successo, o EOF, carattere speciale, se si verifica un errore nella chiusura del file. Questa funzione scarica effettivamente tutti i dati ancora in sospeso nel buffer nel file, chiude il file e rilascia tutta la memoria utilizzata per il file. L'EOF è una costante definita nel file di intestazionestdio.h.

Ci sono varie funzioni fornite dalla libreria standard C per leggere e scrivere un file carattere per carattere o sotto forma di una stringa di lunghezza fissa. Vediamone alcuni nella prossima sezione.

Scrivere un file

Di seguito è riportata la funzione più semplice per scrivere singoli caratteri in un flusso:

int fputc( int c, FILE *fp );

La funzione fputc() scrive il valore del carattere dell'argomento c nel flusso di output a cui fa riferimento fp. Restituisce il carattere scritto scritto con successo, altrimentiEOFse c'è un errore. È possibile utilizzare le seguenti funzioni per scrivere una stringa con terminazione null in un flusso:

int fputs( const char *s, FILE *fp );

La funzione fputs() scrive la stringa snel file a cui fa riferimento fp. Restituisce un valore non negativo in caso di successo, altrimentiEOFviene restituito in caso di errore. Puoi anche usare la funzioneint fprintf(FILE *fp,const char *format, ...)per scrivere una stringa in un file. Prova il seguente esempio:

#include <stdio.h>

int main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

Quando il codice precedente viene compilato ed eseguito, crea un nuovo file test.txt nel /tmpdirectory e scrive due righe utilizzando due diverse funzioni. Leggiamo questo file nella prossima sezione.

Leggere un file

Di seguito è riportata la funzione più semplice per leggere un file di testo carattere per carattere:

int fgetc( FILE * fp );

Il fgetc() la funzione legge un carattere dal file di input a cui fa riferimento fp. Il valore restituito è il carattere letto; o in caso di errore, ritornaEOF. La seguente funzione consente di leggere una stringa da un flusso:

char *fgets( char *buf, int n, FILE *fp );

La funzione fgets() legge fino a n - 1 caratteri dal flusso di input a cui fa riferimento fp. Copia la stringa letta nel bufferbuf, aggiungendo un file null carattere per terminare la stringa.

Se questa funzione incontra un carattere di nuova riga '\ n' o EOF prima di aver letto il numero massimo di caratteri, restituisce solo i caratteri letti fino a quel punto, incluso il carattere di nuova riga. Puoi anche usareint fscanf(FILE *fp, const char *format, ...) per leggere le stringhe da un file, ma smette di leggere dopo aver incontrato il primo carattere di spazio.

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
}

Quando il codice precedente viene compilato ed eseguito, legge il file creato nella sezione precedente e produce il seguente risultato:

1 : This
2 : is testing for fprintf...

3 : This is testing for fputs...

Analizziamo cosa è successo qui. Prima ilfscanf() metodo legge Thisperché dopo di che ha incontrato uno spazio. La seconda chiamata è perfgets(), che legge la riga rimanente finché non incontra la fine della riga. Infine, l'ultima chiamatafgets() legge completamente la seconda riga.

File I / O in Java

Java fornisce una serie ancora più ricca di funzioni per gestire l'I / O dei file. Per ulteriori informazioni su questo argomento, ti suggeriamo di controllare i nostri tutorial Java.

Qui vedremo un semplice programma Java, che è equivalente al programma C spiegato sopra. Questo programma aprirà un file di testo, vi scriverà alcune righe di testo e chiuderà il file. Infine, lo stesso file viene aperto e quindi letto da un file già creato. Puoi provare a eseguire il seguente programma per vedere l'output:

import java.io.*;

public class DemoJava {
   public static void main(String []args) throws IOException {
      File file = new File("/tmp/java.txt");
      
      // Create a File
      file.createNewFile();
      
      //  Creates a FileWriter Object using file object
      FileWriter writer = new FileWriter(file); 
      
      // Writes the content to the file
      writer.write("This is testing for Java write...\n");
      writer.write("This is second line...\n");
      
      // Flush the memory and close the file
      writer.flush();
      writer.close();
      
      // Creates a FileReader Object
      FileReader reader = new FileReader(file); 
      char [] a = new char[100];
      
      // Read file content in the array
      reader.read(a);
      System.out.println( a );
      
      // Close the file
      reader.close();
   }
}

Quando il programma di cui sopra viene eseguito, produce il seguente risultato:

This is testing for Java write...
This is second line...

File I / O in Python

Il seguente programma mostra la stessa funzionalità per aprire un nuovo file, scrivere del contenuto in esso e, infine, leggere lo stesso file -

# Create a new file
fo = open("/tmp/python.txt", "w")

# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");

# Close the file
fo.close()

# Open existing file
fo = open("/tmp/python.txt", "r")

# Read file content in a variable
str = fo.read(100);
print str

# Close opened file
fo.close()

Quando il codice sopra viene eseguito, produce il seguente risultato:

This is testing for Python write...
This is second line...