Byta namn på fil.

Diskussion i 'Frågor, support och diskussion' startad av Elprisionero, 23 feb 2011.

  1. Elprisionero

    Elprisionero Baby Droid Medlem

    Blev medlem:
    24 dec 2010
    Inlägg:
    15
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej

    Skulle behöva lite hjälp med att byta namn på filen jag sparar som ljudfil.


    Kod:
    super.onCreate(icicle);
            setContentView(R.layout.voicerecorder);
    
            directoryPath = "/sdcard/sdcard/myAudio";
    
            File sdAudioDirectory = new File(directoryPath);
            sdAudioDirectory.mkdirs();
            NumberFormat df = new DecimalFormat("000"); // fileId format
    
    
    
    
            System.out.println("df format: " + df.format(1));
    
            int i = 0;
    
            while(true) {
                filename =  df.format(i)+ ".3gp";
    
                f = new File(directoryPath, filename);
    
                System.out.println("filen finns: " + f.exists());
                if (!f.exists())
                    break;
                else
                    i++;
            }
            outfile = new VoiceHelper(directoryPath + "/" + filename);
    
    
    
    
            btnRecord.setOnClickListener(new OnClickListener() {
    
                @Override
    
                public void onClick(View v) {
    
                    try {
                        myChronometer.setBase(SystemClock.elapsedRealtime());
                        outfile.start();
                        myChronometer.start();
                        btnStop.setEnabled(true);
                    } catch (IOException e) {
    
                        // TODO Auto-generated catch block
    
                        e.printStackTrace();
    
                    }
    
                }
    
            });
            btnStop.setOnClickListener(new OnClickListener() {
    
                @Override
    
                public void onClick(View v) {
    
                    try {
    
                        outfile.stop();
                        myChronometer.stop();
    
                        alert.show();
    
                    } catch (IOException e) {
    
                        // TODO Auto-generated catch block
    
                        e.printStackTrace();
    
                    }
    
                }
    
            });
            final EditText input = new EditText(this);
            alert.setView(input);
            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
    File("/sdcard/" + file));
                                                                    String newFileName = input.getText().toString();
                f.renameTo(new File(directoryPath+newFileName));
    
                }
    
    
    }
     
    Last edited: 23 feb 2011
  2. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Vad är problemet/felet?
     
  3. Elprisionero

    Elprisionero Baby Droid Medlem

    Blev medlem:
    24 dec 2010
    Inlägg:
    15
    Mottagna gillanden:
    0

    MINA ENHETER

    ändrade lite i koden nu.
    Mitt problem är att den inte ändrar till det jag skrivit i newFileName.


    Kod:
    public void onCreate(Bundle icicle) {
    		alert = new AlertDialog.Builder(this);
    		alert.setMessage("Byt namn");
    
    
    		super.onCreate(icicle);
    		setContentView(R.layout.voicerecorder);
    
    		directoryPath = "/myAudio/";
    
    		File sdAudioDirectory = new File(directoryPath);
    		sdAudioDirectory.mkdirs();
    
    filename =  UUID.randomUUID().toString()+".3gp";
    
    
    			f = new File(filename);
    
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    			public void onClick(DialogInterface dialog, int whichButton) {
    				newFileName = input.getText().toString()+".3gp";
    alert.setView(input);
    
    System.out.println("newFileName:"+ newFileName );
    				System.out.println("vad är f?:" +f);
    				f.renameTo(new File(directoryPath,newFileName));
    				System.out.println("vad är f nu?" +f);
    				System.out.println("newFileName:"+ directoryPath + newFileName );
    			}
    		
     
    Last edited: 24 feb 2011
  4. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Ditt test är felaktigt. renameTo retunerar true om rename lyckades. Filnamnet som "f" refererar till kommer dock alltid vara samma som du satte det till i File-konstruktorn.
     
  5. Elprisionero

    Elprisionero Baby Droid Medlem

    Blev medlem:
    24 dec 2010
    Inlägg:
    15
    Mottagna gillanden:
    0

    MINA ENHETER

    okej, så långt förstår jag. Hur kan jag göra för att ändra det? Vad kan jag göra för att få det rätt?
     
  6. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Alltså File är bara en instans, och kan referera till en fil i filsystemet. Klassen File är immutable så efter att du skapat ett File-objekt ändras aldrig något i instansen. Däremot kan du använda din instans för att döpa om en fil, om instansen refererar till en fil i filsystemet.

    Du kan göra något liknandes detta:
    Kod:
    File file = new File("old_name.txt");
    File newName = new File("new_name.txt");
    if (file.renameTo(newName)) {
    	file = newName;
    }
    //Här kommer file.getName ge new_name.txt om rename lyckades.