variable de cadena java usando .next () o .nextLine ()

el siguiente es mi código de fonts:

package functiontest; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class FunctionTest { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int option; String cname, cpassword="testpassword",chp="010-000000"; // cname="clerk test"; System.out.println("1. add"); System.out.println("2. delete"); option = scan.nextInt(); switch(option) { case 1: System.out.print("Enter clerk name:\t"); cname = scan.nextLine(); File cfile = new File("clerk/"+cname+".txt"); FileWriter cwrite; try { cwrite = new FileWriter(cfile); BufferedWriter cbuf = new BufferedWriter(cwrite); cbuf.write("clerk name:\t" +cname); cbuf.write("clerk password:\t"+cpassword); cbuf.write("clerk handphone number:\t"+chp); cbuf.flush(); cbuf.close(); System.out.println("The clerk profile create completely"); }catch(IOException e) { System.out.println("Error! clerk profile cannot create"); } ;break; case 2: String dclerk; // dclerk = "clerk test"; System.out.print("\nPlease enter clerk name for delete:\t"); dclerk = scan.next(); File dcfile = new File("clerk/"+dclerk+".txt"); if(!dcfile.exists()) { System.out.println("Error! the clerk profile not exist"); } try { dcfile.delete(); System.out.println(dclerk + "'s prifle successful delete"); }catch(Exception e) { System.out.println("Something wrong! " + dclerk +" profile cannot delete"); };break; } } } 

No puedo ingresar el nombre de la variable cname

  cname = scan.nextLine() 

cuando ejecuto el progtwig, muestra el resultado de la siguiente manera:

 run: 1. add 2. delete 1 Enter clerk name: The clerk profile create completely 

cuando uso .next():

 cname = scan.next() 

no puede leer el

 cname 

con espacios, ejemplo

 clerk test 

leerá

 clerk 

solo como debería hacerlo?

Tu problema es que la línea

 option = scan.nextInt(); 

no lee el nuevo carácter de línea después del número entero. Entonces esa nueva línea finalmente se lee cuando haces nextLine() , más adelante.

Para solucionar esto, debe agregar un extra

 scan.nextLine() 

después de la llamada a nextInt() , luego use

 cname = scan.nextLine(); 

cuando quieras leer el nombre del empleado.